{"version":3,"mappings":"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","names":["_interopDefault","ex","React","require$$0","React__default","_defineProperty","obj","key","value","_inheritsLoose","subClass","superClass","canUseDOM","withSideEffect","reducePropsToState","handleStateChangeOnClient","mapStateOnServer","getDisplayName","WrappedComponent","mountedInstances","state","emitChange","instance","SideEffect","_PureComponent","recordedState","_proto","index","lib","hasElementType","hasMap","hasSet","hasArrayBuffer","equal","a","b","length","i","keys","it","reactFastCompare","error","getOwnPropertySymbols","hasOwnProperty","propIsEnumerable","toObject","val","shouldUseNative","test1","test2","order2","n","test3","letter","objectAssign","target","source","from","to","symbols","s","ATTRIBUTE_NAMES","TAG_NAMES","name","TAG_PROPERTIES","REACT_TAG_MAP","HELMET_PROPS","HTML_TAG_MAP","SELF_CLOSING_TAGS","HELMET_ATTRIBUTE","_typeof","classCallCheck","Constructor","createClass","defineProperties","props","descriptor","protoProps","staticProps","_extends","inherits","objectWithoutProperties","possibleConstructorReturn","self","call","encodeSpecialCharacters","str","encode","getTitleFromPropsList","propsList","innermostTitle","getInnermostProperty","innermostTemplate","innermostDefaultTitle","getOnChangeClientState","getAttributesFromPropsList","tagType","tagAttrs","current","getBaseTagFromPropsList","primaryAttributes","innermostBaseTag","tag","attributeKey","lowerCaseAttributeKey","getTagsFromPropsList","tagName","approvedSeenTags","warn","approvedTags","instanceTags","instanceSeenTags","primaryAttributeKey","tagUnion","property","rafPolyfill","clock","callback","currentTime","cafPolyfill","id","requestAnimationFrame","cancelAnimationFrame","msg","_helmetCallback","handleClientStateChange","newState","commitTagChanges","cb","baseTag","bodyAttributes","htmlAttributes","linkTags","metaTags","noscriptTags","onChangeClientState","scriptTags","styleTags","title","titleAttributes","updateAttributes","updateTitle","tagUpdates","updateTags","addedTags","removedTags","_tagUpdates$tagType","newTags","oldTags","flattenArray","possibleArray","attributes","elementTag","helmetAttributeString","helmetAttributes","attributesToRemove","attributeKeys","attribute","indexToSave","_i","type","tags","headElement","tagNodes","indexToDelete","newElement","existingTag","generateElementAttributesAsString","attr","generateTitleAsString","attributeString","flattenedTitle","generateTagsAsString","attributeHtml","string","tagContent","isSelfClosing","convertElementAttributestoReactProps","initProps","convertReactPropstoHtmlAttributes","initAttributes","generateTitleAsReactComponent","_initProps","generateTagsAsReactComponent","_mappedTag","mappedTag","mappedAttribute","content","getMethodsForTag","_ref","_ref$title","Helmet","Component","_class","_temp","_React$Component","HelmetWrapper","nextProps","isEqual","child","nestedChildren","_babelHelpers$extends","arrayTypeChildren","newChildProps","_ref2","_babelHelpers$extends2","_babelHelpers$extends3","newProps","newFlattenedProps","arrayChildName","_babelHelpers$extends4","children","_this2","_child$props","childProps","_props","PropTypes","mappedState","NullComponent","HelmetSideEffects","HelmetExport","ResizeObserver$1","ResizeObservation$1","ContentRect$1","ContentRect_1","ContentRect","box","styles","ResizeObservation_1","ResizeObservation","cr","ResizeObserverEntry_1","ResizeObserverEntry","ResizeObserver_1","require$$1","resizeObservers","ResizeObserver","message","callbackGuard","targetGuard","findTargetIndex","registerResizeObserver","deregisterResizeObserver","resizeObserver","startLoop","checkStopLoop","functionName","collection","gatherActiveObservationsAtDepth","depth","ro","ot","targetDepth","calculateDepthForNode","hasActiveObservations","hasSkippedObservations","broadcastActiveObservations","shallowestTargetDepth","entries","obs","entry","deliverResizeLoopErrorNotification","errorEvent","notificationIteration","animationFrameCancelToken","runLoop","install","install_1","createBrowserRouter","Sentry","_createBrowserRouter","useDispatch","useReduxDispatch","useSelector","useReduxSelector","useShallowEqualSelector","selector","shallowEqual","useAuth","auth","useApplicationState","applicationState","useApplication","data","useLatestValue","ref","useRef","useEffect","useOrganizations","organizations","useOrganization","QueryKeyPrefix","ShopifyVerifyAuth","ShopifyFetchSignupInfo","ShopifyFetchApplications","ShopifyFetchBots","ShopifyFetchEmbeddings","ShopifyFetchStatus","Organization","OrgInvitation","OrgAccessControlSecurity","OrgConfirmEmailChange","OrgFetchOrganizationInvitations","OrgSubscriptionInfo","OrgPermissions","OrgMemberRoles","OrgMemberRole","OrgVoucherUsage","OrgVoucherUsageByRange","OrgPhoneNumbers","OrgAvailablePhoneNumbers","OrgOmegaAttributes","Application","ApplicationMonthlyUsageWithOrgUsages","AppFetchEnabledFeatures","AppUser","AppUsers","CoreApplicationAttributes","CoreWebhookSettings","ChannelMessages","ChatMessage","ChatApiTokens","ChatDefaultChannelInvitationPreference","ChatChannelMetadata","ChatChannelData","ChatGroupChannelMembers","ChatAiBots","ChatAiBot","ChatAiBotConversationLogs","ChatAiBotAvailable","ChatOpenAiEmbeddings","ChatAiFunctionCall","ChatAiFunctionCalls","ChatAiWorkflows","ChatAiEmbeddingStatus","ChatAiAnalytics","ChatAiAnalyticsPopularItems","ChatAiPromptHistory","ChatAiKnowledgeIndex","ChatAiForm","ChatAiFormData","ChatAiFormDataExports","ChatAiCrawledSiteDetail","ChatOpenChannel","ChatOpenChannelParticipants","ChatExtensions","ChatUserMessageHistoryUsers","ChatPoll","ChatPin","ChatMetrics","ChannelManager","ChannelList","ModerationRule","ModerationRules","ModerationRuleSchema","ModerationReviewTasksSupervision","ModerationLog","ModerationLogQuery","ModerationLogChannel","ModerationLogModerator","ModerationLogSender","ModerationLogUser","ModerationFlaggedUsers","ModerationFlaggedUserSearch","ModerationReviewQueues","ModerationReviewQueue","ModerationReviewQueueModerators","ModerationReviewQueueModeratorsById","ModerationReviewQueueConfig","ModerationReviewTask","ModerationReviewTasks","ModerationReviewQueueSettings","ModerationPinLimitSettings","ModerationAssignReviewTasks","ModerationHiveDescription","ModerationHiveConfiguration","ModerationEngineEnableStatus","ModerationProfanityKeyword","ModerationProfanityDefaultKeywords","ModerationPenaltyActions","ModerationSDKUser","ModerationProfanityCustomType","ModerationProfanityCustomTypeDuplicated","ModerationModeratedUsers","ModerationReviewTickets","ModerationReviewTicket","ModerationModeratorAction","ModerationMemberSeatCount","ModerationModeratorMessageList","ModerationModeratorGroup","ModerationChannelById","ModerationAnalyticsRuleTriggerCount","ModerationAnalyticsActionCount","ModerationEnabledRuleCount","ModerationReportCategory","ModerationReportCategoryVisible","ModerationReportCategoryUsage","ModerationKeywordDetection","UIKitConfig","DeskWebhooks","DeskFetchCustomer","DeskFetchAgentTicketCounts","DeskFetchAssignedTickets","DeskFetchRecentTicketsByCustomer","DeskFetchTicketsByCustomer","DeskAgent","DeskFetchTwitterUser","DeskFollowTwitterUser","DeskUnfollowTwitterUser","DeskGetHTMLKey","DeskFetchIFrameApps","DeskTicketTags","DeskAIContexts","DeskAIFeatureBotLinkedToResponseAssistant","DeskAIChatbotListProxy","DeskAIChatbotProxy","DeskAIFeatureSummarize","CallsSettings","CallsDirectCallsInitialStatus","CallsDirectCall","CallsDirectCalls","CallsDirectCallsReports","CallsStat","CallsRooms","CallsUsage","CallsVoucherUsageByApp","CallsVoucherUsageByOrg","CallsVoucherUsageByType","CallsVoucherUsageAllApps","LiveLiveEvents","LiveLiveEvent","LiveOpenChannel","LiveCustomItems","LiveCreditUsage","LiveUsage","LiveSettings","NotificationsTemplates","NotificationsTemplate","NotificationsChannels","NotificationsChannel","NotificationsNotifications","NotificationsNotificationTargets","NotificationsPreviewMessages","NotificationsMessages","NotificationsSettings","NotificationsAppAttributes","NotificationsWebhook","NotificationsSampleAppQRCode","NotificationsChatExtension","NotificationsTags","NotificationsMetrics","NotificationsTimeSeriesMetrics","NotificationsTagCount","NotificationsUsage","NotificationsTemplateCount","DashboardAppRecentVersion","UseInvoice","PushNotificationConfiguration","UseChannelMessage","OmegaSMSChannels","OmegaChannelBindings","OmegaKakaoSenderCategories","OmegaKakaoTemplateCategories","deeply","fn","map","mapValues","isPlainObject","v","snakeCaseKeys","object","mapKeys","_","snakeCase","camelCaseKeys","camelCase","truncate","text","replace","slice","format","input","qs","stringify","logAxiosException","axios","isAxiosError","config","response","logException","reason","method","toUpperCase","url","params","status","context","request","axiosResponseRejectedInterceptor","isCancel","location","href","getCurrentPathWithQueryString","Promise","reject","Error","isErrorNullOrUndefined","setupAxiosInterceptors","axiosInstance","interceptors","use","defaults","paramsSerializer","arrayFormat","HttpMethod","Get","Delete","Head","Post","Put","Patch","CancellableAxios","createCancelTokenSource","CancelToken","makeRequest","originalConfig","cancelTokenSource","withCredentials","cancelToken","token","axiosPromise","get","delete","head","post","put","patch","cancel","original","cancellableAxios","gateRegionSubdomain","setGateRegionSubdomain","region","getDeskIframeURL","getDeskURL","includes","getDashboardURL","window","protocol","host","getDashboardAPIUrl","DASHBOARD_API_HOST","getGateURL","GATE_URL","getGateURLWithRegion","subdomain","GATE_URL_REGION","createApplication","payload","fetchAPITokens","appId","role","headers","createAPIToken","password","label","revokeAPITokens","apiToken","getApplicationSummary","app_id","getApplication","fetchEnabledFeatures","updateEnabledFeatures","getMessageSearchPipeline","gateAxios","axiosModule","create","baseURL","getQueryOptions","query","option","encodedQuery","fixedEncodeURIComponent","trim","UserSearchQueryOptions","QUERY_USER_ID","user_ids","QUERY_USER_NICKNAME","nickname","QUERY_USER_NICKNAME_STARTSWITH","nickname_startswith","fetchUsers","limit","metadata","LIST_LIMIT","searchUsers","next","active_mode","endpoint","createUser","userId","profileUrl","profileFile","issueAccessToken","formData","FormData","set","deleteUser","encodeURIComponent","reactivateUser","is_active","deactivateUser","leaveAll","leave_all_when_deactivated","fetchUser","with_access_token","include_phone_number","editUser","updates","fetchUserPushTokens","tokenType","deleteUserPushToken","fetchRegisteredOperator","organizationUid","searchOrganizationMembers","email","registerUserAsOperator","sdk_user_id","unregisterUserAsOperator","fetchUserGroupChannelCount","super_mode","fetchUserMetadata","deleteUserMetadata","postUserMetadata","fetchFlaggedUsers","postFlaggedUsers","userIds","blacklist_user_ids","deleteFlaggedUsers","fetchAPITokensQueryFn","queryKey","api_tokens","fetchEnabledFeaturesQueryFn","fetchUserQueryFn","useIsAuthenticated","authenticated","convertEnabledFeaturesObjectToFeatureKeys","enabledFeatures","Object","filter","ChatFeatureName","MessageSearch","useSelfServiceFeatures","isSelfService","isOrgActive","is_self_serve","isEmpty","application","isLoading","isLoadingFeatures","selfServiceFeatures","useQuery","queryFn","enabled","select","useMemo","result","isPermittedFactory","userPermissions","allowedPermissions","options","combinedWith","some","permission","every","isAccessiblePageFactory","page","Page","startsWith","overview","users","notifications","dataExports","aiBots","uiKit","allChannels","openChannels","groupChannels","supergroupChannels","advancedModeration","moderationLogs","moderationRules","moderationAllTicket","moderationMyTicket","flaggedUsers","moderatedUsers","moderatorMessage","moderationAnalytics","callsStudio","directCalls","groupCalls","liveStudio","liveEvents","allTickets","conversation","views","assignmentLogs","proactiveChat","customers","deskDataExport","monitor","reports","deskSettings","DeskSettingsPage","general","aiFeatures","automation","triggers","bots","systemMessages","assignmentRules","priorityRules","quickReplies","teams","customerFields","ticketFields","security","credentials","webhooks","integrations","split","AuthorizationContext","createContext","isPermitted","isAccessiblePage","isFeatureEnabled","preparingFeatures","user","country_code","new_email","email_verified","first_name","last_name","country_name","profile_id","profile_url","user_id","two_factor_authentication","verification_email_sent","coachmark_completed","join_date","account_locked","last_password_changed_at","is_onboarding_survey_done","permissions","is_predefined","created_at","updated_at","description","application_access_controls","application_access_controls_details","is_application_access_control","pii_access","isSetEqual","size","aElement","has","getLegacyFeatureSet","premiumFeatures","Set","LegacyPremiumFeatureMap","Boolean","useLegacyFeatures","setResult","useState","latestResult","legacyFeatures","current_premium_features","currentResult","Array","useFeatureEnabled","features","useCallback","feature","AuthorizationContextProvider","availablePermissionsStringified","join","jsx","featureFlags","toggleFeatureFlag","isEnabled","LocalStorage","upsertObject","removeFromObject","isFeatureFlagEnabled","getObject","FeatureFlagStore","toggle","FeatureFlagContext","flags","featureFlagKeys","flag","FeatureFlagContextProvider","currentFlags","reduce","acc","flagMap","setFlagMap","useFeatureFlags","useContext","DeskLocale","DEFAULT","en_US","ko_KR","DEFAULT_LOCALE","useIsDeskLocale","locale","deskSettingsLocaleSet","useAuthorization","useIsDeskLocaleKoKR","isDeskLocaleKoKR","deskIntlKo","getIntlKeyMessages","originalMessages","cur","languageLoaders","en","languageEN","__vitePreload","messages","ko","languageKO","useIntlMessages","queryLocale","loadedMessages","IntlMessagesLoadingContext","ConnectedIntlProvider","intlInspector","IntlProvider","I18nProvider","useAppIntl","isLoadingMessages","intl","useIntl","formatMessage","values","opts","fetchCardInfo","organization_uid","initCardRegistration","registerCard","payment_method_id","payment_method","fetchCurrentSubscription","product","fetchSubscriptionInfo","fetchSubscriptionByMonth","month","subscribeSubscriptionPlan","unsubscribeSubscriptionPlan","subscription_id","endReason","end_reason","cancelUnsubscribeSubscription","cancelDowngradeSubscription","fetchInvoices","fetchBillingContacts","uid","updateBillingContacts","fetchSubscriptionPlans","fetchVoucherSubscription","updateVoucherSubscription","deleteVoucherSubscription","fetchVouchers","createVoucher","purchaseVoucher","voucherUid","activateVoucher","fetchCreditRates","fetchDiscountTable","fetchACHCreditTransferSource","fetchVoucherCreditUsageByApp","fetchVoucherCreditUsageByAppWithRange","range","fetchVoucherCreditUsageByCallsType","orgId","order","fetchVoucherCreditUsageByAllApps","fetchVoucherCreditUsageByRange","resolution","start","end","useCurrentSubscription","queryClient","useQueryClient","isError","refetch","update","setQueryData","getQueryData","isLoaded","currentSubscription","useDesk","desk","useDeskProject","project","useIsDesk","useMatch","useDeskOrLocalTimeZone","isDesk","timeZone","timezone","getLocalTimeZone","useGetToday","today","useIsCallsActivatedOrganization","is_calls_enabled","fetchUsageAlertEmail","updateUsageAlertEmail","fetchOrganizationDailyUsage","fetchOrganizationDailyAccumulateUsage","fetchOrganizationMonthlyUsage","fetchApplicationDailyUsage","fetchMonthlyUsageByApplications","fetchApplicationMonthlyUsageWithOrgUsages","safeParseDate","parseDate","undefined","safeParseAbsolute","parseAbsolute","convertToCalendarDate","CalendarDate","Date","getFullYear","getMonth","getDate","substring","convertToZonedDateTime","ZonedDateTime","toZoned","toISOString","date","MILLISECONDS_IN_SECOND","MILLISECONDS_IN_MINUTE","MILLISECONDS_IN_HOUR","MILLISECONDS_IN_DAY","getZonedDateTimeDifference","unit","diff","compare","Math","floor","ceil","getZonedDateStartOfDay","toCalendarDateTime","Time","getZonedDateEndOfDay","getCalendarDateYearMonthString","toString","useAsync","deps","initialState","lastCallId","args","callId","then","useMonthlyUsage","load","start_month","end_month","isLoadingUsage","monthlyUsage","defaultUsage","usage","quota","CurrentChatSubscriptionContext","isFreeTrial","isFreeTrialMissing","isDeveloperPlan","isPlanOverChargeable","isAiSubscription","chatUsage","MonthlyActiveUser","PeakConnection","AiEngine","CurrentChatSubscriptionProvider","isOrganizationEmpty","isOrganizationDeactivated","organization","OrganizationStatus","Active","isCallsEnabledOrganization","isLoadingChatSubscription","SubscriptionProduct","Chat","subscriptionName","subscription_name","getSelfServiceSubscriptionProps","SubscriptionName","FreeTrial","Developer","getToday","isAvailable","plan","safeParseNumber","ai_engine","as","ai_chatbot_plan","ai_chatbot","purchased_units","hard_limit","mau","pc","toast","warning","useCurrentChatSubscription","isLoadingPlan","rest","useAppId","useTranslationSync","getMessages","translatedMessages","createIntl","t","isArray","Children","toArray","DialogType","Overage","CreateApp","CallsFreeVoucher","ChangeAppName","DeleteApplication","Custom","Confirm","ConfirmWithOrganizationName","Confirm1k","ReasonForCancel","ChangePassword","InviteMember","ChangeMemberRole","RegisterCard","DeleteAccount","RegisterTwoFactor","SamlOneMoreStepToGo","SelectApplicationsToAccess","AnalyticsExport","AnnouncementDataDisplay","CreateOpenChannel","CreateGroupChannel","ChangeToSupergroup","UpdateSDKUser","CreateSDKUser","EditChannel","ChannelData","ResourceMetadata","AdminMessage","DeleteChannels","DeleteMessage","EditMessage","ModeratorInformation","BanMuteUser","DeactivateUser","ReactivateUser","GetApiToken","SubscriptionPlan","PushApnsSave","PushApnsVoipRegister","PushApnsVoipEdit","PushFcmSave","PushHuaweiSave","PushTester","CreateUser","DeleteUser","InviteAsGroupChannelMember","IssueUserAccessToken","RegisterUserAsOperator","AssignTransferTicketToAgent","AssignTransferTicketToGroup","CreateAgentGroup","CloseTicket","ConfirmEndOfChat","UpdateAgentProfile","ViewAgentProfile","CreateNewToken","AddWebhook","EditWebhook","DeleteWebhook","ReopenTicket","ExportTicket","ChangeEmail","SelectTwitterStatusRecipients","ReportsExport","ExportTicketsInfo","CreateProactiveChat","DeleteAgentGroup","ManageDirectCallsColumns","ExportMissedTicket","ExportPendingTicket","ExportDirectCallLogs","PhoneboothUserUnregister","DirectCallsDurationLimit","CreateStudioRoom","CreateRoom","DeleteRoom","CallsEditCustomItems","CallsCustomItemsColumns","CallsStudioRoomInvite","CallsStudioAddExistingRoom","CallsStudioMobileCreateUser","CallsStudioMobileAddUser","CallsStudioMobileEditUser","CallsStudioMobileRemoveUser","CallsUpdateSubscription","CallsDisableSubscription","CallsPayment","CallsRateTooltip","ChangePlan","ConvertFreePlan","AgentActivationStatusChange","AgentConnectionStatusChange","RegexEditor","Uninstall","DeleteNexmoAccount","IPRestrictionGuide","CreateDeskBot","DeactivateDeskBot","DeleteDeskBot","DeskAIPromotion","CustomerHideTickets","PreviousChat","SSOConfig","DeleteDeskSendbirdMessage","SessionTimeout","EditQuickReplyCategory","DeleteQuickReplyCategory","CheckAllRequiredFieldsFilled","DeactivateExtensionApp","ToggleExtensionAppStatus","AddFlaggedUsers","DeleteFlaggedUsers","CreateLiveEvent","UseDefaultProfanityKeywords","DownloadRecording","CreateNotificationTag","ImportNotificationUsers","AiBotEmbedding","AiBotKnowledge","AppSelector","AiBotSubscription","AiBotStudioPlugin","AiFeedback","AiEmbedGuide","UIKitFeatureIntroduction","AddHostCandidate","ReleaseModeration","ExportData","FormGuide","FormPreview","WhatsAppMetadata","CopyTemplate","CopyTemplateGuide","PollDetail","TicketAssignment","ModeratorGroupReassignment","DownloadNotificationSandboxApp","AddCustomReportCategory","ReportCategoryUsage","KeywordDetectionGroupDelete","PublishTemplateVersion","PreviousTemplateVersion","SaveTemplateChanges","RestoreTemplateVersionMethod","TemplateEditInformation","TemplateEditAddChannels","TemplateEditUIKitPreset","WhatsAppSetup","KeywordEdit","AeroCreateUserDialog","AeroDeleteUserDialog","AeroReactivateUserDialog","AeroDeactivateUserDialog","AeroIssueUserAccessToken","CreateSimulate","AeroAddKnowledgeSource","BannedPhraseDialog","CreateAiAgent","AeroCreateEmailChannelDialog","DialogsActions","showDialog","createAction","hideDialog","setIsFetching","useShowDialog","dispatch","optionsRef","LinkWithPermissionCheck","alertType","linkProps","showPermissionDeniedDialog","dialogTypes","dialogProps","positiveButtonProps","isNegativeButtonHidden","Link","_StyledTooltip","TooltipVariant","Light","event","preventDefault","_styled","Tooltip","withConfig","displayName","componentId","ContentContainer","div","PageContainer","styled","TablePageContainer","CenteredPageContainer","makeGrid","wideWidth","wideGutterSize","narrowMaxWidth","narrowGutterSize","columns","maxWidth","width","wideGridMediaQuery","first","interpolations","css","ResponsiveContainer","ResponsiveColumn","column","includeOuterGutters","Container","Title","h1","Headings","Description","Body","cssVariables","Action","ApplicationSettingLink","variant","LinkVariant","Inline","UnavailableFeatureGuide","featureName","availability","linkToSettingRenderer","isPermittedToOrganizationSettings","FeatureAvailability","NotSupportedPlan","jsxs","Icons.UpgradeColored","marginBottom","Button","Icons.TogglesColored","startCase","whiteSpace","ie9UnsupportedStyles","reactDomContainerStyles","theme","transitionDefault","GlobalStyles","createGlobalStyle","clearfix","animationBounceDelay","keyframes","animationScaleY","animationLoading","SENTRY_TAGS_BRANCH","SENTRY_RELEASE","SENTRY_DIST","NODE_ENV","BUILD_MODE","includesIgnoredFiles","frame","file","filename","isIncludingIgnoredFile","exceptions","exception","stacktrace","frames","isIgnoredError","extra","isMatch","eventProcessor","initializeSentry","dsn","Breadcrumbs","console","BrowserTracing","routingInstrumentation","useLocation","useNavigationType","createRoutesFromChildren","matchRoutes","environment","release","dist","ignoreErrors","denyUrls","beforeBreadcrumb","breadcrumb","category","test","initialScope","scope","setTags","branch","addEventProcessor","tracesSampleRate","DesktopNotificationContext","requestPermission","show","isDesktopNotificationSupported","Notification","constructor","isDesktopNotificationGranted","prototype","DesktopNotificationProvider","audioRef","resolve","body","icon","CDN_ASSETS_PREFIX","hasSound","noAutoClose","notification","onclick","parent","focus","muted","play","catch","setTimeout","close","useDesktopNotification","CONNECTION_HANDLER_KEYS","ConnectionHandler","GROUP_CHANNEL_HANDLER_KEYS","GroupChannelHandler","OPEN_CHANNEL_HANDLER_KEYS","OpenChannelHandler","USER_EVENT_HANDLER_KEYS","UserEventHandler","SendbirdChatContext","connect","disconnect","init","getConnectionObservable","getGroupChannelObservable","getOpenChannelObservable","getUserEventObservable","unsubscribeAll","instanceMap","SendbirdChatProvider","instanceKey","sbRef","connection$Ref","Subject","groupChannel$Ref","openChannel$Ref","userEvent$Ref","unsubscribeAll$Ref","oldInstance","connectionState","ConnectionState","OPEN","SendbirdChat","modules","GroupChannelModule","OpenChannelModule","connectionHandler","groupChannelHandler","openChannelHandler","userEventHandler","addConnectionHandler","groupChannel","addGroupChannelHandler","openChannel","addOpenChannelHandler","addUserEventHandler","pipe","takeUntil","incomingKey","useSendbirdChat","useSendbirdChatConnectionObservable","unsubscribe$Ref","unsubscribe","useSendbirdChatGroupChannelObservable","useSendbirdChatOpenChannelObservable","useSendbirdChatConnected","isConnected","setIsConnected","onConnected$","onDisconnected$","onReconnectStarted$","onReconnectSucceeded$","onReconnectFailed$","subscriptionOnConnected","subscribe","subscriptionOnDisconnected","subscriptionOnReconnectStarted","subscriptionOnReconnectSucceeded","subscriptionOnReconnectFailed","InvitationTokensRedirect","Navigate","search","ErrorState","className","action","onRetry","isRetrying","_StyledDiv","_StyledDiv2","EmptyState","EmptyStateSize","Large","Icons","FormattedMessage","reload","_styled2","RouteErrorBoundary","normalizeNonFiniteValue","isBodyPotentiallyScrollable","bodyComputedStyle","parentComputedStyle","bodyComputedOverflowX","bodyComputedOverflowY","parentComputedOverflowX","parentComputedOverflowY","argsLength","doc","win","quirksMode","x","y","arg","fetchApplicationMonthlyUsageWithOrgUsagesQueryFn","fetchSubscriptionInfoQueryFn","fetchSupportPlanSubscriptionInfoQueryFn","useAuthentication","initialPlanInfos","infos","future","SubscriptionInfoContext","subscriptions","updateSubscriptions","fetchSubscriptions","isUnsubscribing","isUnsubscribed","isPlanChangeScheduled","SubscriptionInfoContextProvider","setSubscriptions","info","hasOrganizationGeneralPermission","subscriptionInfo","is","nonEmptyObject","current_subscription","future_subscription","isCurrentFreePlan","Free","isCurrentPlanEnding","end_date","isFuturePlanExist","SupportPlanContext","SupportPlanContextProvider","isFetched","Support","useImagePreview","equalityFn","imagePreview","useSentryApplicationTracker","setTag","useUser","useSentryUserTracker","String","getDirectCalls","getDirectCall","call_id","getDirectCallDataExports","getDirectCallsReports","createDirectCallDataExports","fetchCallStats","fetchUserSummary","fetchRooms","fetchRoom","roomId","createRoom","deleteRoom","editCustomItems","deleteCustomItems","fetchParticipants","fetchWebhookSetting","updateWebhookSetting","fetchCallsSettings","updateCallsSettings","createFreeVoucher","fetchChatIntegration","display_all_chat_integration_categories","updateChatIntegration","requestFreeVoucher","commonBillingApi","count","isFreeVoucherIssued","processVoucherPayment","purchased","processActivation","processSubscription","credit","paid_amount","duration_days","voucher_subscription_credit","voucher_subscription_payment_amount","voucher_subscription_duration_days","voucher","subscription","all","credits","price","duration","priceInCents","round","fetchNextVoucher","vouchersResponse","ordering","nextVoucher","results","invoice","invoiceResponse","offset","voucher__isnull","voucher_uid","purchaseFailedVoucher","getErrorMessage","fallbackMessage","errorMessage","detail","useErrorToast","ignoreDuplicates","toastOptions","toastOptionRef","SubscriptionStatus","ON","OFF","PAYMENT_DECLINED","UsageStatus","Normal","Warn","useAsyncSubscription","fetchState","fetch","updateState","removeState","remove","setState","useCallsVoucherProvider","vouchersState","fetchVouchersApi","nextVoucherState","services","updatedAt","setUpdatedAt","subscriptionState","fetchSubscription","updateSubscription","removeSubscription","now","vouchers","loading","CallsVoucherContext","CallsVoucherProvider","useCallsVoucher","processVoucher","transferred_credit","used_credit","expire_dt","max","balance","usageRate","expireAt","isActive","isReserved","useLatestVoucher","latestVoucher","activeVoucher","find","endedVoucher","latest","useNextVoucher","useSubscription","nextVoucherResponse","amount","durationDays","useVoucherLoader","vouchersError","nextVoucherError","subscriptionError","loadAll","useVoucherError","isActivatable","isReady","useVoucherExpirationStatus","ready","isPast","differenceInMonths","EXPIRED_WARNING_MONTH","useVoucherDepletionStatus","DEPLETED_WARNING_RATE","useVoucherAlert","expirationStatus","depletionStatus","FullScreenModalContext","activeModalID","openModal","closeModal","FullScreenModalContextProvider","setActiveModalID","CallsVoucherModal","lazy","modals","FullScreenModalIDs","CallsVoucher","FullScreenModals","Suspense","changedArray","item","ErrorBoundary","_this","_len","_args","_key","_this$props","_len2","_key2","_this$props$onError","_this$props2","prevProps","prevState","resetKeys","_this$props$onResetKe","_this$props3","_this$props4","fallbackRender","FallbackComponent","fallback","React.isValidElement","React.createElement","React.Component","withErrorBoundary","errorBoundaryProps","Wrapped","useDialogs","dialogs","useHideDialog","CancelButton","buttonType","buttonProps","ConfirmButton","forwardRef","isFetching","disabled","DeleteButton","BasicInput","attrs","readOnly","BasicTextarea","textarea","InputIndicator","span","hasError","DialogFormLabel","Typography","DialogFormSet","alignItems","DialogFormContent","DialogFormBody","inline","titleWidth","DialogFormDivider","ListCountText","ListHeader","ListHeaderColumn","ListHeaderColumnFunc","ListHeaderColumnImage","ListContent","ListContentItem","ListContentItemImage","Avatar","ListContentItemText","DialogFormAction","DialogAlertTitle","DialogAlertNote","DialogAlertDesc","DialogAlertLink","transitions","properties","DialogAlert","__variableDynamicImportRuntimeHelper","glob","path","useTranslationOfLocale","importFn","translation","setTranslation","isUnmountedRef","default","useTranslation","withTranslation","Translated","getDialogWidth","DialogContainer","DialogWrapper","StyledDialog","elevation","modal","DialogHeader","DialogTitle","DialogDescription","DialogHeaderInterfaceSection","DialogClose","IconButton","DialogBody","isFullBody","LocalizedDialog","titleButtonComponent","dialogClassName","onClose","hideCloseIconButton","initialFocus","ariaBusy","shouldCloseOnOverlayClick","locale2","renderHeader","renderBody","portalFocusTrapElement","document","getElementById","handleWrapperClick","e","currentTarget","FocusTrap","getFocusTrapOptions","fallbackFocus","Dialog","colors_old","primary","purple","dark","skyBlue","core","background","gray","DATA_VIZ_COLORS","cssColors","DATA_VIZ_HOVER_COLORS","getDataVizColors","dataSize","maxSize","getDataVizHoverColors","getDoughnutChartColors","hover","ZIndexes","coachMark","tooltipOverNavigation","callsWidget","navigation","portal","previewBackground","timePickerPanel","stickyHeader","drawer","drawerBackground","chartHoverTooltip","sidebar","MEDIA_SIZES","TABLET","TABLET_VERTICAL","MOBILE_LARGE","MOBILE_SMALL","media","literals","placeholders","Portal","zIndex","container","setContainer","portalRoot","element","createElement","style","position","top","right","left","appendChild","parentNode","removeChild","createPortal","Backdrop","transitionStyles","entering","opacity","entered","exiting","exited","Overlay","containerComponent","refHandlers","ReactDOM","hasEverOpened","isOpen","handleBackdropMouseDown","canOutsideClickClose","handleBackdropClick","handleDocumentClick","eventTarget","isClickInOverlay","contains","overlayWillOpen","hasBackdrop","addEventListener","overlayWillClose","removeEventListener","renderBackdrop","backdropStyles","transitionDuration","defaultStyle","transition","Transition","maybeRenderChild","decoratedChildren","cloneElement","componentDidMount","getDerivedStateFromProps","componentDidUpdate","render","usePortal","childrenWithTransitions","push","transitionGroup","TransitionGroup","importFunc","ResourceMetadataDialog","AssignTransferTicketToAgentDialog","CloseTicketDialog","ConfirmEndOfChatDialog","CreateAgentGroupDialog","CreateTokenDialog","TransferTicketToAgentGroupDialog","CreateStudioRoomDialog","CreateRoomDialog","DeleteRoomDialog","EditCustomItemsDialog","CustomItemsColumnsDialog","CallsStudioRoomInviteDialog","CallsStudioAddExistingRoomDialog","CallsStudioMobileCreateUserDialog","CallsStudioMobileAddUsersDialog","CallsStudioMobileEditUserDialog","ManageDirectCallsColumnsDialog","PushAPNSVoIPEditDialog","PushAPNSVoIPRegisterDialog","CallsStudioMobileRemoveUserDialog","CallsUpdateSubscriptionDialog","PhoneboothUserUnregisterDialog","DirectCallsDurationLimitDialog","AnalyticsExportDialog","AnnouncementDataDisplayDialog","AdminMessageDialog","CreateSDKUserDialog","DeleteChannelsDialog","EditChannelDialog","ChannelDataDialog","UpdateSDKUserDialog","CreateOpenChannelDialog","CreateGroupChannelDialog","ChangeToSupergroupDialog","DeleteMessageDialog","EditMessageDialog","PreviousChatDialog","ModeratorInformationDialog","BanMuteUserDialog","PushAPNsSaveDialog","PushFCMSaveDialog","PushHuaweiSaveDialog","PushTesterDialog","RegexEditorDialog","ChangeEmailDialog","DeleteAccountDialog","RegisterTwoFactorDialog","CallsPaymentDialog","CallsRateTooltipDialog","ChangePlanDialog","ChangeAppNameDialog","DeleteApplicationDialog","RegisterCardDialog","ChangeMemberRoleDialog","InviteMemberDialog","InviteAsGroupChannelMemberDialog","SelectApplicationsDialog","OneMoreStepToGoDialog","SamlSSOConfigDialog","CallsFreeVoucherDialog","CreateAppDialog","SubscriptionPlanDialog","GetAPITokenDialog","CreateUserDialog","DeactivateUserDialog","DeleteUsersDialog","IssueUserAccessTokenDialog","ReactivateUserDialog","RegisterUserAsOperatorDialog","AgentActivationStatusChangeDialog","AgentConnectionStatusChangeDialog","SelectTwitterStatusRecipientsDialog","UpdateAgentProfileDialog","ViewAgentProfileDialog","CreateProactiveChatDialog","DeleteAgentGroupDialog","CreateDeskBotDialog","DeactivateDeskBotDialog","DeleteDeskBotDialog","DeleteNexmoAccountDialog","AddWebhookDialog","DeleteWebhookDialog","EditWebhookDialog","ReportsDataExportDialog","ReopenTicketDialog","ExportTicketDialog","ExportTicketsInfoDialog","ExportMissedTicketDialog","ExportPendingTicketDialog","ExportDirectCallLogsDialog","DeleteDeskSendbirdMessageDialog","EditQuickReplyCategoryDialog","DeleteQuickReplyCategoryDialog","CheckAllRequiredFieldsFilledDialog","DeskAIPromotionDialog","CustomerSideProfileHideTicketsDialog","OverageDialog","CallsDisableSubscriptionDialog","IPRestrictionGuideDialog","ChangePasswordDialog","ConfirmDialog","ConfirmWithOrganizationNameDialog","Confirm1kDialog","ReasonForCancelDialog","ConvertFreePlanDialog","CustomDialog","DeleteDialog","UninstallDialog","SessionTimeoutDialog","AddFlaggedUserDialog","DeleteFlaggedUserDialog","DeactivateExtensionAppDialog","ToggleExtensionAppStatusDialog","CreateLiveEventDialog","UseDefaultProfanityKeywordsDialog","DownloadRecordingDialog","CreateNotificationTagDialog","ImportNotificationUsersDialog","AiBotEmbeddingDialog","AiBotKnowledgeDialog","AiBotSubscriptionDialog","FormPreviewDialog","AppSelectorDialog","AiBotStudioPluginDialog","AiFeedbackDialog","AddHostCandidateDialog","ReleaseModerationDialog","ChannelManagerDialog","WhatsAppMetadataDialog","CopyTemplateDialog","CopyTemplateGuideDialog","ExportDataDialog","PollDetailDialog","TicketAssignmentDialog","ModeratorGroupReassignmentDialog","DownloadNotificationSandboxAppDialog","AddCustomReportCategoryDialog","ReportCategoryUsageDialog","KeywordDetectionGroupDeleteDialog","PublishTemplateVersionDialog","PreviousTemplateVersionDialog","SaveTemplateChangesDialog","RestoreTemplateVersionMethodDialog","TemplateEditInformationDialog","TemplateEditAddChannelsDialog","TemplateEditUIKitPresetDialog","WhatsAppSetupDialog","KeywordEditDialog","CreateAiAgentDialog","CreateSimulateDialog","AeroAddKnowledgeSourceDialog","dialogComponents","defineMessages","errorTitle","errorBody","errorBtnRetry","ErrorFallback","resetErrorBoundary","Subtitles","Icons.Error","DialogLoading","showLoading","setShowLoading","setTimeoutId","clearTimeout","_StyledSpinner","Dialogs","lazyComponentKey","setLazyComponentKey","preventCloseByESC","overlayZIndex","onEscKeyDown","code","DialogComponent","componentOrLazyOptions","dialogComponentProps","p","$_css","$_css2","$_css3","$_css4","$_css5","Spinner","ImagePreviewActions","showImagePreview","hideImagePreview","NAVIGATION_BAR_HEIGHT","BANNER_HEIGHT","useDimension","dimension","setDimension","getDimension","latestDimension","resizeEventListener","newDimension","ImagePreviewContainer","ImageHolder","ImageTop","ImageName","ImageMenu","ImageMenuButton","button","Images","images","maxHeight","image","ImagePreview","isPreventDownloadFilesEnabled","isDeskSettingsPreventDownloadFilesEnabled","hide","holderComponentRef","topComponentRef","handleContainerMouseDown","ev","handleClickDownload","open","Icons.Download","Icons.Close","getDashboardAppRecentVersion","APP_UPDATE_NOTIFICATION_INTERVAL","useAppUpdateToast","intervalMs","setEnabled","version","currentDashboardAppVersion","isProduction","refetchInterval","refetchOnWindowFocus","timeout","actions","onClick","autoHide","useAuthRole","gainsightEventNames","whatsNew","goToBotSettings","coachMarkGotIt","addToMyShopify","formsCreateButtonCreate","functionCallCreated","workflowCreated","onboardingSuggestedReplyClicked","onboardingUrlInput","onboardingSkipToBotStudio","botButtonAddToMyWebsite","botButtonApplyChanges","botButtonAITranslation","botButtonPromptInstructions","botButtonAddSrc","botButtonCrawlAllPages","botDivAddKnowledgeSourceUrl","botDivAddKnowledgeSourceFile","botDivAddKnowledgeSourceQna","botDivAddKnowledgeSourceNotion","botDivAddKnowledgeSourceGoogleDrive","botDivAddKnowledgeSourceSalesforce","sendGainsightEvent","eventName","aptrinsic","useGainsight","isOrgV2","safeOrganization","isSupportPlanLoaded","supportData","isOrgV2SubscriptionLoaded","orgV2AccountInfo","skipGain","firstName","lastName","signUpDate","valueOf","countryName","language","navigator","createdAt","customerType","subscription_type","subscriptionValue","plan_value","supportType","display_name","supportValue","GainsightInitializer","useListenLocationPathChange","handleLocationChange","onLocationChange","pathname","drawerTransitionDurationSecond","DrawerContext","activeDrawerID","openDrawer","closeDrawer","DrawerContextProvider","setActiveDrawerID","drawerState","setDrawerState","useDrawer","shadow","isFullHeight","Background","Drawer","isDarkBackground","isTransitioned","setIsTransitioned","useImagePreviewEscKeyHandler","isImagePreviewVisible","useUpdateWindowIntl","RootLayout","Outlet","SettingsRoutes","AuthRoute","GuideToDesktop","Integrations","NavigationLayout","Activate","App","Auth","AwsMarketplace","Home","Onboarding","AIChatbotOnboarding","AIChatbotOnboardingV2","AIChatbotWidgetPreview","OrganizationStatusScreen","PageNotFound","CreateOrganization","CreateApplication","Account","AccountProfile","AccountSecurity","Settings","SignInWithSso","Aero","AppRoutes","Routes","Route","SpinnerFull","routes","createRoutesFromElements","browserRouter","interaction","filterElements","getNearestItem","getElements","inRangeByAxis","axis","getPointByAxis","center","minDistance","nearestItems","evenPoint","distance","distanceBetweenPoints","isOlderPart","act","req","EPSILON","clamp","clampAll","inPointRange","point","radius","borderWidth","hBorderWidth","inBoxRange","x2","y2","inRangeX","inRangeY","getElementCenterPoint","useFinalPosition","centerX","centerY","requireVersion","pkg","min","ver","strict","parts","isPercentString","toPercent","toPositivePercent","getRelativePosition","getSize","positivePercent","calculateTextAlignment","textAlign","toPosition","defaultValue","isObject","valueOrDefault","isBoundToPoint","defined","initAnimationProperties","chart","centerBased","initAnim","applyDefault","checkCallbackResult","loadHooks","hooks","hooksContainer","activated","hook","isFunction","widthCache","notRadius","fontsKey","fonts","prev","isImageOrCanvas","translate","ctx","rotation","toRadians","setBorderStyle","setShadowStyle","measureLabelSize","optFont","f","toFont","strokeWidth","lines","mapKey","calculateLabelSize","drawBox","rect","height","stroke","addRoundedRectPath","toTRBLCorners","drawLabel","getOpacity","labels","optColor","colors","setTextStrokeStyle","applyLabelDecoration","applyLabelContent","drawPoint","rad","RAD_PER_DEG","drawPointStyle","xOffset","yOffset","cornerRadius","TAU","TWO_THIRDS_PI","QUARTER_PI","PI","HALF_PI","font","lhs","l","lh","c","elementValue","isNumber","limitedLineScale","scaleValue","scale","isFinite","retrieveScaleID","scales","scaleID","axes","getDimensionByScale","reverse","getChartPoint","chartArea","xScale","yScale","resolveBoxProperties","xDim","getChartDimensionByScale","yDim","resolvePointProperties","adjustCenterX","adjustCenterY","getChartCircle","resolveLineProperties","area","resolveFullLineProperties","resolveLimitedLineProperties","resolveBoxAndLabelProperties","resolveLabelElementProperties$1","scaleId","startProp","endProp","dim","calculateX","labelSize","padding","calculatePosition$1","calculateY","boxOpts","labelOpts","padStart","padEnd","adjust","availableSize","toPadding","rotated","angle","cos","sin","cx","cy","moveHooks","eventHooks","updateListeners","handleEvent","handleMoveEvents","handleClickEvents","elements","previous","changed","dispatchMoveEvents","checkElements","dispatchEvent","listeners","handler","elementHooks","updateHooks","visibleElements","invokeHook","callbackHook","adjustScaleRange","annotations","getScaleLimits","changeScaleLimit","verifyScaleOptions","annotation","verifyScaleIDs","suggestedLimit","scaleLimitDefined","scaleOptions","verifyProperties","prop","scaleIDOption","limits","updateLimits","raw","BoxAnnotation","Element","mouseX","mouseY","positions","LabelAnnotation","visible","drawCallout","getLabelSize","boxSize","measureRect","calculatePosition","pointX","pointY","callout","calloutPosition","resolveCalloutPosition","isPointInRange","separatorStart","separatorEnd","getCalloutSeparatorCoord","sideStart","sideEnd","getCalloutSideCoord","rotatedPoint","getCalloutSeparatorAdjust","side","getCalloutSideAdjust","resolveCalloutAutoPosition","xAdjust","yAdjust","xPoints","yPoints","margin","pointInLine","p1","p2","interpolateX","interpolateY","sqr","rangeLimit","coordInCurve","cp","pointInCurve","coordAngleInCurve","angleInCurve","LineAnnotation","mx","my","isOnLabel","epsilon","intersects","inAxisRange","drawCurve","startOpts","endOpts","startAdjust","endAdjust","getArrowHeads","drawArrowHead","inside","isLineInArea","limitLineToArea","getControlPoint","labelProperties","resolveLabelElementProperties","arrowHeadsDefaults","bottom","limitPointToArea","x1","y1","dx","dy","lenSq","xx","yy","textSize","calculateLabelPosition","calculateAutoRotation","sizes","rotatedSize","calculateT","pt","xCoordinateSizes","yCoordinateSizes","adjustLabelCoordinate","toDegrees","space","spaceAround","calculateTAdjust","lineSize","lineW","lineH","r","coordinate","labelSizes","halfSize","line","arrowStartOpts","arrowEndOpts","getLineAdjust","arrowOpts","fill","backgroundColor","borderColor","arrowOffsetX","drawArrowHeadOnCurve","startAngle","endAngle","ps","pe","EllipseAnnotation","pointInEllipse","ellipse","xRadius","yRadius","cosAngle","sinAngle","PointAnnotation","PolygonAnnotation","pointIsInPolygon","axisPoints","el","sides","elProps","buildPointElement","halfBorder","points","isInside","A","B","annotationTypes","directUpdater","hooks$1","optDefs","resolveObj","isIndexable","resolveType","updateElements","mode","animations","resolveAnimations","resyncElements","annotationOptions","getOrCreateElement","resolver","getContext","toSkip","updateSubElements","resolveAnnotationOptions","animOpts","Animations","mainElement","subElements","definition","subElement","subResolver","initProperties","elementClass","defs","add","chartStates","Chart","draw","caller","clip","clipArea","drawableElements","getDrawableElements","drawElement","unclipArea","sub","color","family","typeface","system","register","TimeScale","CategoryScale","LinearScale","AnnotationPlugin","BLACKLISTED_ERROR_MESSAGES","QueryClient","defaultOptions","queries","retry","queryCache","QueryCache","onError","meta","skipErrorToast","createAsyncThunk","createReduxAsyncThunk","withTypes","getEditChannelRequestPayload","forEach","append","transformToSupergroupChannelUrl","channelUrl","createOpenChannel","createGroupChannel","fetchMetadata","channelType","channel_url","setMetadata","deletes","responses","errors","upsertMetadataResponse","upsert","editChannel","deleteChannel","fetchOpenChannels","listToken","searchOpenChannels","queryOptions","fetchOpenChannel","fetchClassicOpenChannelMigrationStatus","startClassicOpenChannelMigration","fetchGroupChannels","customType","showEmpty","superMode","searchGroupChannels","fetchMyGroupChannels","membersExactlyIn","channelUrls","show_empty","members_exactly_in","channel_urls","fetchGroupChannel","inviteAsGroupChannelMember","selectApplicationData","ALERT_EMAIL_INVALID","ALERT_APPLICATION_NAME_CHANGED","ALERT_CARD_AGGREMENT_REQUIRED","ALERT_NOT_ALLOWED_FEATURE","ALERT_CHANNEL_CREATED","ALERT_CHANNEL_DELETED","ALERT_CHANNEL_IS_REQUIRED","ALERT_ADMIN_MESSAGE_SENT","ALERT_ADMIN_MESSAGE_LENGTH","ALERT_ANALYTICS_DATE_RANGE_92","ALERT_REPORTS_DATE_RANGE_31","ALERT_SETTINGS_PUSH_ENABLED","ALERT_SETTINGS_PUSH_DISABLED","ALERT_SETTINGS_ACCESS_TOKEN_POLICY","ALERT_SETTINGS_WEBHOOKS","ALERT_SETTINGS_DISPLAY_PAST_MESSAGE_ON","ALERT_SETTINGS_DISPLAY_PAST_MESSAGE_OFF","ALERT_SETTINGS_AUTO_EVENT_MESSAGE","ALERT_SETTINGS_CREDENTIAL_FILTER_ADDED","ALERT_SETTINGS_CREDENTIAL_FILTER_DELETED","ALERT_SETTINGS_MAX_LENGTH_OF_MESSAGE","ALERT_SETTINGS_APPLICATION_DELETED","ALERT_SETTINGS_PUSH_NOTIFICATION_TEMPLATES","ALERT_SETTINGS_APNS_CERT_ERROR","ALERT_COPY_SUCCESS","ALERT_BAD_REQUEST","ALERT_DIALOG_ADMIN_MESSAGE_LIMITED","DESC_DIALOG_ADMIN_MESSAGE","DESC_DIALOG_ADMIN_MESSAGE_LIMITED","DESC_DIALOG_ADMIN_MESSAGE_LENGTH","DESC_DIALOG_DELETE_CHANNELS","PH_SEARCH_CHANNELS","PH_DIALOG_ADMIN_MESSAGE_LIMITED","snakeCaseToTitleCase","snakeCaseString","words","capitalizedFirstWord","charAt","remainingWords","titleCaseString","toastBadRequestWarning","log","fetchOpenChannelsAction","getState","rejectWithValue","channels","ChannelsActions","deleteChannels","channel","isDeletedAtLeastOne","success","tokenAndLimit","OpenChannelSearchOperator","urlEquals","nameContains","customTypeEquals","errorData","setOpenChannelSearchQuery","setOpenChannelSearchState","setOpenChannelSearchSuccess","setOpenChannelSearchOption","updateOpenChannelInList","deleteOpenChannelInList","setCurrentOpenChannel","navigate","showEmptyChannels","GroupChannelSearchOperator","userIdEquals","membersIncludeIn","nicknameEquals","nameEquals","nameStartswith","setGroupChannelSearchQuery","setGroupChannelSearchState","setGroupChannelSearchSuccess","setGroupChannelSearchOption","setGroupChannelShowEmptyChannels","setGroupChannelsSortOrder","updateGroupChannelInList","deleteGroupChannelInList","setCurrentGroupChannel","sendAdminMessageWithModeratorInfo","sendPush","moderator","send_push","editMessage","channelURL","messageId","fetchChannelThreadMessages","parentMessageId","messageTs","include","prevLimit","nextLimit","operatorFilter","includeRemoved","withSortedMetaArray","include_reply_type","include_thread_info","presigned_file_url","including_removed","fetchChannelMessages","senderIds","ts","includeReplyType","includeParentMessageInfo","includeThreadInfo","message_ts","fetchGroupChannelsMessagesTotalCount","fetchGroupChannelMembers","fetchOpenChannelParticipants","fetchChannelBannedUsers","showTotalBanCount","fetchChannelMutedUsers","showTotalMuteCount","muteUser","seconds","unmuteUser","banUser","unbanUser","freezeChannel","freeze","updateOperators","operator_ids","getBanDetail","is_banned","getMuteDetail","is_muted","start_at","end_at","remaining_duration","ModerationsActions","sendAdminMessage","origin","resetOpenChannels","resetOpenChannelsModerationData","resetGroupChannels","resetGroupChannelsModerationData","CommonColors","WHITE","BLACK","GRADIENT","LightThemeColors","PRIMARY","PURPLE","RED","ORANGE","YELLOW","GREEN","BLUE","DarkThemeColors","onboardingStepPaths","STEP_ONE_PATH","STEP_TWO_PATH","STEP_THREE_PATH","STEPS","STEP_ONE","STEP_TWO","STEP_THREE","FIRST_ONBOARDING_STEP_URL","FIRST_ONBOARDING_STEP_FULL_URL","V2_FIRST_ONBOARDING_STEP_URL","V2_FIRST_ONBOARDING_STEP_FULL_URL","signIn","signOut","samlSigninInitiate","resendActivationMail","activateAccount","signUp","verifyAuth","uniq","getDeskToken","verifyEmail","sendEmailVerificationMail","confirmEmailChange","getEmailChange","resetPassword","forgotPassword","fetchInvitation","invite_hash","oauthGoogle","idToken","id_token","verifyTwoFactor","recoverTwoFactor","resetTwoFactorAuth","twoFactorAuthId","proveGreenLantern","verifySSOCallbackToken","isAeroAvailable","useAeroAvailabilityStore","setIsAeroAvailable","verifyIsAiAgentOrganization","aiAgentDashboardType","ai_agent_dashboard_type","orgCreationExceptionRoute","shouldRedirectToOrgCreation","emptyArray","AuthenticationActions","authFetchingSet","authFetchingUnset","signedIn","accountActivated","verifyAuthentication","PredefinedRoles","OWNER","unauthenticated","authenticationFailed","verificationMailSent","emailVerified","two_factor_registration_required","two_factor_authentication_required","twoFactorAuthenticationSet","fetchMAU","startDate","endDate","fetchMonthlyCCU","start_year","end_year","fetchDAU","fetchMessagesCount","fetchDailyCCU","start_day","end_day","fetchDailyPCC","time_dimension","show_sdk","fetchHourlyCCU","fetchMessagingUsage","fetchCallsUsage","getAPIToken","checkDNSResolveStatus","registerCallsApplication","sendbird_region","setCoachmarkComplete","registerDeskApplication","is_desk_enabled","changeAppName","appName","app_name","togglePushEnabled","push_enabled","fetchPushConfiguration","pushTypePath","createPushConfiguration","updatePushConfiguration","pushConfigurationId","deletePushConfiguration","fetchPushMessageTemplates","updatePushMessageTemplates","templateName","updatePushSettings","getWebhooksAllCategories","display_all_webhook_categories","getWebhooksInformation","updateWebhookInformation","enabled_events","include_members","include_unread_count","events_to_include_channel_metadata","updateMaxLengthMessage","max_length_message","updateIgnoreMessageOffset","ignore_message_offset","updateAutoEventMessage","auto_event_message","fetchDefaultChannelInvitationPreference","updateDefaultChannelInvitationPreference","auto_accept","fetchDefaultProfanity","updateAccessTokenUserPolicy","guest_user_policy","addCredentialsFilter","credentials_key","removeCredentialsFilter","deleteApplication","updateModerationInfoADMM","is_moderator_info_in_admin_message","fetchSettingsGlobal","updateSettingsGlobal","fetchSettingsForCustomChannelTypes","fetchSettingsForCustomChannelType","custom_type","createSettingsForCustomChannelType","updateSettingsForCustomChannelType","getIPWhitelist","putIPWhitelist","ip_whitelist_addresses","deleteIPWhitelist","updateOpenChannelDynamicPartitioningOption","option_type","fetchAccessControlList","updateAccessControlList","ApplicationActions","applicationSet","applicationReset","applicationCreated","applicationUpdated","applicationAttributesUpdated","applicationFetched","fetchApplication","api_token","isFetchingChannel","isFetchingLoadMore","isSearching","isSuccess","groupChannelsReducer","createReducer","builder","addCase","pending","fulfilled","concat","rejected","deleteTargetChannel","initialModerationState","openChannelsReducer","changePassword","changeEmail","updateProfile","isAbleToUnregister","unregister","prepareTwoFactor","registerTwoFactor","turnoffTwoFactor","activateLockedAccount","linkAwsAccount","AccountActions","newEmail","passwordChanged","userUpdated","checkUnregisterAvailability","org","turnOffGoogleAuthenticator","isFetchingUnregister","accountReducer","addMatcher","isAnyOf","applicationAppNameChanged","applicationDeleted","applicationUpdateReducer","is_social","is_sso","authenticationReducer","BillingActions","fetchingCardInfo","cardInfo","billingReducer","dialogsReducer","imagePreviewReducer","LNBActions","setLNBMenuItems","setActiveLNBMenuItem","updateLNBMenuItem","menuItems","activeItemKey","activeGroup","lnbReducer","items","subMenus","subMenu","NOT_FOUND","createSingletonCache","equals","createLruCache","cacheIndex","getEntries","clear","defaultEqualityCheck","createCacheKeyComparator","equalityCheck","defaultMemoize","func","equalityCheckOrOptions","providedOptions","_providedOptions$equa","_providedOptions$maxS","resultEqualityCheck","comparator","cache","memoized","matchingEntry","getDependencies","funcs","dependencies","dep","dependencyTypes","createSelectorCreator","memoize","memoizeOptionsFromArgs","createSelector","_recomputations","_lastResult","directlyPassedOptions","resultFunc","_directlyPassedOption","_directlyPassedOption2","memoizeOptions","finalMemoizeOptions","memoizedResultFunc","createOrganization","organizationName","organization_name","contact","shopify_signup_token","fetchOrganization","updateOrganization","fetchOrganizationMembers","updateOrganizationMemberRole","deleteOrganizationMember","exportOrganizationMembersList","inviteMember","fetchOrganizationInvitations","updateInvitation","cancelInvitation","setLoginIPRanges","loginIPRanges","ignore_cidr_on_two_factor_authentication","login_cidr_list","updateSamlConfiguration","deleteSamlConfiguration","transferOwner","fetchMemberRoles","getOrganizationAPIKey","fetchMemberRole","roleId","fetchMemberRoleByName","fetchPermissions","createMemberRole","editMemberRole","deleteMemberRole","renewOrganizationAPIKey","startFreeTrial","enforce2FA","enforce","updateAccessControlSecurity","FileSaver_min","this","d","g","global","h","j","k","m","module","saveAs","csvBlob","Blob","fileSaverSaveAs","OrganizationsActions","organizationCreated","organizationUpdated","updateOrganizationName","updateOrganizationSlugName","slug_name","samlConfigurationPayload","organizationKey","updateSamlConfigurationReset","exportOrganizationMembers","currentOrganizationSelector","samlConfigurationForm","isSaving","organizationsReducer","timestamp","sso_entity_id","sso_idp_url","sso_idp_cert","sso_enforcing","sso_jit_provisioning","sso_default_role","lastUpdatedTimestamp","patchApplicationName","applicationSummary","applicationStateReducer","SettingsActions","newApp","push_message_templates","template_name","template","getWebhookAllCategories","webhook","all_webhook_categories","allowedDomain","credentials_list","credential","fetchModeratorInfoADMM","updateModeratorInfoADMM","isFetchingAppName","isFetchingPushMessageTemplates","isFetchingWebhookInformation","isFetchingMaxLengthMessage","isFetchingIgnoreMessageOffset","isFetchingAutoEventMessage","isFetchingAccessTokenUserPolicy","isAddingCredentialsFilter","isFetchingModeratorInfoADMM","isPushMessageTemplatesFetched","isFetchedWebhook","webhookAllEvents","isModeratorInfoInAdminMessage","settingsReducer","DeskApiAxios","pid","defaultHeaders","mergeConfigWithDefault","defaultsDeep","fetchAgentGroups","isBotOnly","fetchAgentGroup","groupId","createAgentGroup","agents","updateAgentGroup","deleteAgentGroup","transferTargetGroupId","checkAgentGroupKeyDuplicate","checkAgentGroupNameDuplicate","searchAgentGroups","selectDeskProject","AgentGroupsActions","AGENT_GROUP_LIST_LIMIT","pagination","needFetchList","agentGroupQueryUpdated","agentGroupsReset","agentSearchQuery","agentGroupsReducer","fetchAssignedTickets","fetchTicketsByCustomer","fetchRecentTicketsByCustomer","fetchURLPreview","updateTicketAssignment","assignmentId","deleteDeskSendbirdMessage","ticketId","fetchFacebookPage","fetchFacebookMessages","sendFacebookMessage","facebookMessage","recipientId","messageText","filedata","fetchFacebookFeeds","createFacebookFeed","facebookFeed","parentFeedId","editFacebookFeed","isHidden","feedId","deleteFacebookFeed","facebookFeedLike","facebookFeedUnlike","markAsRead","fetchTwitterDirectMessageEvents","createTwitterDirectMessageEvent","mediaId","patchTwitterDirectMessageEvent","fetchTwitterStatuses","createTwitterStatus","inReplyToStatusId","mediaIds","patchTwitterStatusStatus","patchTwitterStatusRetweeted","retweeted","patchTwitterStatusFavorited","favorited","fetchInstagramComments","createInstagramComment","igMediaId","parentIgCommentId","deleteInstagramComment","instagramCommentId","fetchInstagramMessages","createInstagramMessage","fetchWhatsAppMessages","createWhatsAppMessage","toNumber","fetchWhatsAppMedia","fetchAgentTicketCounts","agentId","fetchTicketMessages","fetchTickets","searchTickets","fetchTicket","updateTicket","transferTicket","closeTicket","closeComment","forceAssignTicket","agent","fetchTicketsCounts","addToWIP","assignTicket","reopenTicket","assignTicketToAgentGroup","group_id","addTag","tagId","removeTag","deskCallsDial","deskCallsEnd","runes$2","HIGH_SURROGATE_START","HIGH_SURROGATE_END","LOW_SURROGATE_START","REGIONAL_INDICATOR_START","REGIONAL_INDICATOR_END","FITZPATRICK_MODIFIER_START","FITZPATRICK_MODIFIER_END","VARIATION_MODIFIER_START","VARIATION_MODIFIER_END","DIACRITICAL_MARKS_START","DIACRITICAL_MARKS_END","ZWJ","GRAPHEMS","runes","increment","nextUnits","isGraphem","isVariationSelector","isDiacriticalMark","isZeroWidthJoiner","isFirstOfSurrogatePair","currentPair","nextPair","isRegionalIndicator","isFitzpatrickModifier","betweenInclusive","codePointFromSurrogatePair","pair","highOffset","lowOffset","lower","upper","chars","endIndex","runesModule","convertNodeArrayToReactFragment","nodeArray","getExtension","basename","pop","pos","lastIndexOf","guessTimezone","Intl","DateTimeFormat","resolvedOptions","CMD_MESG","CMD_FILE","CMD_ADMM","CMD_BRDM","getBaseMessageTypeFromPlatformAPIMessage","MessageType","FILE","ADMIN","USER","sdkMessageTypeChecker","isUserMessage","messageType","isFileMessage","isAdminMessage","shouldRenderImage","fileExtension","imageExtensions","match","shouldRenderDateLine","previousDate","nextDate","toCalendarDate","convertURLToLink","URL_PARSE_REGEX","convertEmailToLink","EMAIL_PARSE_REGEX","convertURLsAndEmailsToLinks","RegExp","convertMessageWithCustomRule","customRule","convertedEmailToLink","convertedByCustomRule","regex","converter","isTicketNoteMessage","convertToRichTicketNote","ticketNote","sender","createdBy","isRemoved","getCreatedAtFromMessage","instagramComment","mergeTicketNotesAndMessages","ticketNotes","sort","compareAsc","getTwitterStatusURL","screenName","statusId","parseTextAndFilesFromTwitterStatus","parameters","entities","extendedEntities","showImagePreviewRequest","quotedStatusPermalink","mergedEntities","entityType","entityList","entity","indices","onAttachmentPhotoClick","mediaURL","prefixText","textNodes","files","startIndex","predecessor","successor","unshift","expanded_url","display_url","id_str","screen_name","media_url_https","medium","w","video_info","aspect_ratio","variants","sortedByBitrateDescVariants","bitrate","content_type","contentType","aspectRatio","sources","displayedText","node","parseTwitterStatusEntities","twitterStatus","safeParseJSON","convertTwitterStatusTicketToMergedTwitterStatus","twitterStatusTicket","ticket","twitterStatusTwitterUser","twitterStatusTwitterUserId","twitterUser","retweetedFavoritedBy","twitterStatusTicketId","parseTwitterDirectMessageEventAttachments","attachment","ConversationActions","fetchConversation","conversationFetched","fetchConversationMessages","currentMessages","types","initialOrNextFetchedTimestamp","conversationTicketMessageUpdated","updateConversationTicketAssignment","conversationAssignmentSet","conversationReset","conversationMessagesReset","assignTicketToMyself","typingStatusSet","agentTypingStatusSet","othersTypingStatusSet","facebookMessages","facebookMessageUpdated","senderId","facebookPageId","isEcho","isTemp","facebookFeeds","facebookFeedsUpdated","attachments","fromId","parentId","feedType","reactions","facebookFeedRequestUpdated","feed","fetchTwitterDirectMessages","twitterDirectMessages","parsedMessages","createTwitterDirectMessage","deleteTwitterDirectMessageEvent","twitterDirectMessageEventUpdated","twitterStatuses","mergedTwitterStatuses","patchTwitterStatus","patchTwitterStatusTwitterUser","twitterStatusId","retweetCount","favoriteCount","condition","twitterStatusFromDeskEventUpdated","instagramComments","instagramUsername","instagramCommentUpdated","instagramCommentFromDeskEventUpdated","instagramMessages","instagramMessageUpdated","instagramMessageFromDeskEventUpdated","instagramMessageUnsendUpdated","whatsAppMessages","whatsAppMessageFromDeskEventUpdated","deskAuthentication","auth_type","updateProjectSetting","fetchProjectApiKeys","createProjectApiKey","deleteProjectApiKey","DeskActions","userEmail","deskAuthenticated","updateProject","snoozeDefaultToast","setDeskProject","updateOperationHours","fetchApiTokens","apiTokenPaginationSet","createApiToken","apiTokens","deleteApiToken","isLastItemOnPage","setAgentConnection","setDeskConnected","setDeskAgent","resetDesk","isFetchingMessages","typingStatus","typingMembers","agentTyping","othersTyping","conversationReducer","mid","eventId","duplicatedStatusIndex","findIndex","duplicatedEventIndex","duplicatedMessageIndex","recentAssignment","message_id","updated","isUpdating","connected","deskReducer","connection","facebookLoadPages","accessToken","short_lived_user_access_token","facebookSubscribe","page_id","facebookUnsubscribe","facebookActivePages","facebookUpdatePageSettings","pageId","getProjectTwitterUsers","getTwitterOauthToken","subscribeTwitter","patchTwitterUser","getProjectInstagramAccounts","instagramLoadAccounts","shortLivedUserAccessToken","fetchInstagramUser","patchInstagramUser","instagramUserId","isCommentEnabled","isMessageEnabled","createIframeApp","fetchIframeAppDetail","updateIframeApp","createNexmoAccount","updateNexmoAccount","verifyNexmoApp","getProjectNexmoAccounts","getNexmoAccountDetail","IntegrationsActions","facebookAddPages","onSuccessNavigateTo","facebookPages","res","facebookPage","isConversationEnabled","isFeedEnabled","isAddingFacebookPages","isSubscribingFacebookPages","isUnsubscribingFacebookPage","loadedFacebookPages","fetchFacebookActivePages","isUpdatingFacebookPageSettings","integrationsReducer","currentFacebookPageIds","newFacebookPages","getTicketStatus2","ticketStatus","allTicketStatus","TicketStatus","PENDING","ACTIVE","IDLE","WIP","CLOSED","ALL","getColorByConnection","AgentConnection","ONLINE","OFFLINE","AWAY","getTicketStatusLabelKey","PROACTIVE","getTicketPriorityLabelKey","priority","TicketPriority","URGENT","HIGH","MEDIUM","LOW","getAgentStatusLabelKey","AgentActivationStatusValue","PAUSED","INACTIVE","DELETED","getIsDefaultTeam","sortToDefaultTeamFirst","getGeneralizedTicketChannelType","getSorterParams","sorter","sortOrder","SortOrder","ASCEND","getTicketURL","isAdmin","createGoogleMapLink","lat","long","attachPlusSignToPhoneNumber","number","checkIsMediaTypeWAMessageContent","getWorkingHourVerticalLineColor","getTicketLastMessagePropertiesFromMessage","lastMessage","lastMessageAt","isTicketMustBeFetchedUsingPlatformAPI","currentDeskAgentId","status2","TicketDetailActions","fetchTicketDetailTicket","fetchTicketDetailHeader","fetchTicketDetailMessages","getResultReturnValue","ticketDetail","ticketDetailUpdated","ticketDetailSendbirdAPIMessageUpdated","ticketDetailReset","ticketDetailReducer","group","closeStatus","TicketHistoryActions","fetchTicketHistoryMessages","ticketHistory","currentTicketHistorySet","currentTicketHistoryReset","isFetchingInitialMessages","isFetchingPrevMessages","tickets","ticketHistoryReducer","TicketsActions","alert","toAssignment","moveTicketToWIP","moveTicketToIdle","channelName","ticketsRefreshAutomaticSet","ticketsRefreshAutomaticItemSet","defaultRefreshItem","refresh","isAutomatic","automaticItem","ticketsReducer","store","configureStore","reducer","applicationUpdate","account","billing","lnb","settings","agentGroups","middleware","getDefaultMiddleware","immutableCheck","serializableCheck","actionCreatorCheck","devTools","serialize","replacer","Event","_reactName","elementType","$$typeof","setTooltipPortalId","rootElementID","root","createRoot","TypeFixedFeatherProvider","FeatherProvider","installResizeObserver","QueryClientProvider","RecoilRoot","Provider","RouterProvider"],"ignoreList":[0,1,2,3,4,5,6,7,68,84,115,150,151,153,168],"sources":["../node_modules/react-side-effect/lib/index.js","../node_modules/react-fast-compare/index.js","../node_modules/object-assign/index.js","../node_modules/react-helmet/es/Helmet.js","../node_modules/resize-observer/lib/ContentRect.js","../node_modules/resize-observer/lib/ResizeObservation.js","../node_modules/resize-observer/lib/ResizeObserverEntry.js","../node_modules/resize-observer/lib/ResizeObserver.js","../app/router.tsx","../app/redux/hooks/index.ts","../app/redux/hooks/auth.ts","../app/redux/hooks/applicationState.ts","../app/hooks/useApplication.ts","../app/hooks/useLatestValue.ts","../app/redux/hooks/organizations.ts","../app/hooks/useOrganization.ts","../app/constants/queryKey.ts","../app/utils/ObjectKeyConverter.ts","../app/api/setupAxiosInterceptors.ts","../app/api/cancellableAxios.ts","../app/api/shared.ts","../app/core/api/application.ts","../app/core/api/users.ts","../app/core/api/queryFn.ts","../app/hooks/useIsAuthenticated.ts","../app/authorization/convertEnabledFeaturesObjectToFeatureKeys.ts","../app/authorization/useSelfServiceFeatures.ts","../app/authorization/authorizationContext.tsx","../app/utils/featureFlags/featureFlagStore.ts","../app/utils/featureFlags/featureFlagContext.tsx","../app/hooks/useFeatureFlags.ts","../app/hooks/useIsDeskLocale/index.ts","../app/hooks/useAuthorization.ts","../app/hooks/useIsDeskLocale/locales/ko_KR.ts","../app/intl/getIntlKeyMessages.ts","../app/intl/useIntlMessages.ts","../app/intl/connectedIntlProvider.tsx","../app/hooks/useAppIntl.ts","../app/common/api/billing.ts","../app/hooks/useCurrentSubscription.ts","../app/redux/hooks/desk.ts","../app/hooks/useDeskProject.ts","../app/hooks/useDeskOrLocalTimeZone.ts","../app/hooks/useGetToday.ts","../app/hooks/useIsCallsActivatedOrganization.ts","../app/common/api/usage.ts","../app/utils/InternationalizedDate.ts","../app/hooks/useAsync.ts","../app/hooks/useMonthlyUsage.ts","../app/common/containers/CurrentChatSubscriptionProvider.tsx","../app/hooks/useAppId.ts","../app/hooks/useTranslationSync.tsx","../app/common/containers/dialogs/DialogType.ts","../app/common/redux/actions/dialogs.ts","../app/hooks/useShowDialog.ts","../app/ui/components/LinkWithPermissionCheck/index.tsx","../app/ui/components/grid/index.tsx","../app/ui/components/UnavailableFeaturesGuide/index.tsx","../app/ui/styles/ie9UnsupportedStyles.ts","../app/ui/styles/reactDomContainerStyles.ts","../app/ui/styles/theme.ts","../app/ui/styles/index.ts","../app/utils/initializeSentry.ts","../app/DesktopNotification.tsx","../app/SendbirdChat.tsx","../app/common/containers/InvitationTokensRedirect/index.tsx","../app/ui/components/ErrorState.tsx","../app/common/containers/RouteErrorBoundary.tsx","../node_modules/element-scroll-polyfill/index.js","../app/common/api/queryFn.ts","../app/hooks/useAuthentication.ts","../app/SubscriptionInfoContext.tsx","../app/SupportPlanContext.tsx","../app/redux/hooks/imagePreview.ts","../app/useSentryApplicationTracker.tsx","../app/hooks/useUser.ts","../app/useSentryUserTracker.tsx","../app/calls/api/index.ts","../app/calls/services.ts","../app/utils/getErrorMessage.ts","../app/hooks/useErrorToast.ts","../app/common/containers/CallsVoucherContext.tsx","../app/ui/components/FullScreenModal/context.tsx","../app/common/containers/FullScreenModals/index.tsx","../node_modules/react-error-boundary/dist/react-error-boundary.esm.js","../app/redux/hooks/dialogs.ts","../app/hooks/useHideDialog.ts","../app/ui/components/dialog/buttons.tsx","../app/ui/components/input/index.tsx","../app/ui/components/dialog/components.ts","../app/hooks/useTranslation.tsx","../app/ui/components/dialog/dialog.tsx","../app/ui/colors.ts","../app/ui/zIndexes.ts","../app/ui/index.ts","../app/ui/components/portal/index.tsx","../app/ui/components/overlay/index.tsx","../app/common/containers/dialogs/dialogComponents.ts","../app/common/containers/dialogs/index.tsx","../app/common/redux/actions/imagePreview.ts","../app/constants/ui.ts","../app/hooks/useDimension.tsx","../app/common/containers/imagePreview/index.tsx","../app/common/api/app.ts","../app/hooks/useAppUpdateToast.tsx","../app/hooks/useAuthRole.ts","../app/hooks/useGainsight/index.ts","../app/hooks/useListenLocationPathChange/index.tsx","../app/ui/components/drawer/constants.ts","../app/ui/components/drawer/drawerContext.ts","../app/ui/components/drawer/drawerContextProvider.tsx","../app/ui/components/drawer/useDrawer.ts","../app/ui/components/drawer/Drawer.tsx","../app/common/containers/layout/RootLayout.tsx","../app/browserRouter.tsx","../node_modules/chartjs-plugin-annotation/dist/chartjs-plugin-annotation.esm.js","../app/chartjsDefault.ts","../app/queryClient.ts","../app/redux/createAsyncThunk.ts","../app/chat/utils/EditChannelUtils.ts","../app/chat/api/utils.ts","../app/chat/api/channels.ts","../app/core/redux/selectors/applicationState.ts","../app/utils/text.tsx","../app/utils/toastBadRequestWarning.ts","../app/chat/redux/actions/channels.ts","../app/chat/api/channelModeration.ts","../app/chat/redux/actions/moderations.ts","../app/chat/aibots/containers/Onboarding/constants.ts","../app/chat/aibots/containers/OnboardingV2/constants.ts","../app/common/api/authentication.ts","../app/Aero/stores/AeroAvailability.ts","../app/common/utils/verifyIsAiAgentOrganization.ts","../app/common/redux/actions/authentication.ts","../app/core/api/overview.ts","../app/core/api/settings.ts","../app/core/redux/actions/application.ts","../app/chat/redux/reducers/groupChannels.ts","../app/chat/redux/reducers/openChannels.ts","../app/common/api/account.ts","../app/common/redux/actions/account.ts","../app/common/redux/reducers/account.ts","../app/common/redux/reducers/applicationUpdate.ts","../app/common/redux/reducers/authentication.ts","../app/common/redux/actions/billing.ts","../app/common/redux/reducers/billing.ts","../app/common/redux/reducers/dialogs.ts","../app/common/redux/reducers/imagePreview.ts","../app/common/redux/actions/lnb.ts","../app/common/redux/reducers/lnb.ts","../node_modules/reselect/es/defaultMemoize.js","../node_modules/reselect/es/index.js","../app/common/api/organizations.ts","../node_modules/file-saver/dist/FileSaver.min.js","../app/utils/saveAs.ts","../app/common/redux/actions/organizations.ts","../app/common/redux/reducers/organizations.ts","../app/core/redux/reducers/applicationState.ts","../app/core/redux/actions/settings.ts","../app/core/redux/reducers/settings.ts","../app/desk/api/DeskApiAxios.ts","../app/desk/api/agentGroups.ts","../app/desk/redux/selectors/desk.ts","../app/desk/redux/actions/agentGroups.ts","../app/desk/redux/reducers/agentGroups.ts","../app/desk/api/conversation.ts","../app/desk/api/ticketDetail.ts","../app/desk/api/tickets.ts","../node_modules/runes/index.js","../app/utils/convertNodeArrayToReactFragment.tsx","../app/utils/getExtension.ts","../app/utils/guessTimezone.ts","../app/utils/messages.tsx","../app/desk/utils/twitterUtils.tsx","../app/desk/redux/actions/conversation.ts","../app/desk/api/desk.ts","../app/desk/redux/actions/desk.ts","../app/desk/redux/reducers/conversation.ts","../app/desk/redux/reducers/desk.ts","../app/desk/api/integrations.ts","../app/desk/redux/actions/integrations.ts","../app/desk/redux/reducers/integrations.ts","../app/desk/utils/index.ts","../app/desk/redux/actions/ticketDetail.ts","../app/desk/redux/reducers/ticketDetail.ts","../app/desk/redux/actions/ticketHistory.ts","../app/desk/redux/reducers/ticketHistory.ts","../app/desk/redux/actions/tickets.ts","../app/desk/redux/reducers/tickets.ts","../app/store.ts","../app/index.tsx"],"sourcesContent":["'use strict';\n\nfunction _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; }\n\nvar React = require('react');\nvar React__default = _interopDefault(React);\n\nfunction _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n}\n\nfunction _inheritsLoose(subClass, superClass) {\n subClass.prototype = Object.create(superClass.prototype);\n subClass.prototype.constructor = subClass;\n subClass.__proto__ = superClass;\n}\n\nvar canUseDOM = !!(typeof window !== 'undefined' && window.document && window.document.createElement);\nfunction withSideEffect(reducePropsToState, handleStateChangeOnClient, mapStateOnServer) {\n if (typeof reducePropsToState !== 'function') {\n throw new Error('Expected reducePropsToState to be a function.');\n }\n\n if (typeof handleStateChangeOnClient !== 'function') {\n throw new Error('Expected handleStateChangeOnClient to be a function.');\n }\n\n if (typeof mapStateOnServer !== 'undefined' && typeof mapStateOnServer !== 'function') {\n throw new Error('Expected mapStateOnServer to either be undefined or a function.');\n }\n\n function getDisplayName(WrappedComponent) {\n return WrappedComponent.displayName || WrappedComponent.name || 'Component';\n }\n\n return function wrap(WrappedComponent) {\n if (typeof WrappedComponent !== 'function') {\n throw new Error('Expected WrappedComponent to be a React component.');\n }\n\n var mountedInstances = [];\n var state;\n\n function emitChange() {\n state = reducePropsToState(mountedInstances.map(function (instance) {\n return instance.props;\n }));\n\n if (SideEffect.canUseDOM) {\n handleStateChangeOnClient(state);\n } else if (mapStateOnServer) {\n state = mapStateOnServer(state);\n }\n }\n\n var SideEffect =\n /*#__PURE__*/\n function (_PureComponent) {\n _inheritsLoose(SideEffect, _PureComponent);\n\n function SideEffect() {\n return _PureComponent.apply(this, arguments) || this;\n }\n\n // Try to use displayName of wrapped component\n // Expose canUseDOM so tests can monkeypatch it\n SideEffect.peek = function peek() {\n return state;\n };\n\n SideEffect.rewind = function rewind() {\n if (SideEffect.canUseDOM) {\n throw new Error('You may only call rewind() on the server. Call peek() to read the current state.');\n }\n\n var recordedState = state;\n state = undefined;\n mountedInstances = [];\n return recordedState;\n };\n\n var _proto = SideEffect.prototype;\n\n _proto.UNSAFE_componentWillMount = function UNSAFE_componentWillMount() {\n mountedInstances.push(this);\n emitChange();\n };\n\n _proto.componentDidUpdate = function componentDidUpdate() {\n emitChange();\n };\n\n _proto.componentWillUnmount = function componentWillUnmount() {\n var index = mountedInstances.indexOf(this);\n mountedInstances.splice(index, 1);\n emitChange();\n };\n\n _proto.render = function render() {\n return React__default.createElement(WrappedComponent, this.props);\n };\n\n return SideEffect;\n }(React.PureComponent);\n\n _defineProperty(SideEffect, \"displayName\", \"SideEffect(\" + getDisplayName(WrappedComponent) + \")\");\n\n _defineProperty(SideEffect, \"canUseDOM\", canUseDOM);\n\n return SideEffect;\n };\n}\n\nmodule.exports = withSideEffect;\n","/* global Map:readonly, Set:readonly, ArrayBuffer:readonly */\n\nvar hasElementType = typeof Element !== 'undefined';\nvar hasMap = typeof Map === 'function';\nvar hasSet = typeof Set === 'function';\nvar hasArrayBuffer = typeof ArrayBuffer === 'function' && !!ArrayBuffer.isView;\n\n// Note: We **don't** need `envHasBigInt64Array` in fde es6/index.js\n\nfunction equal(a, b) {\n // START: fast-deep-equal es6/index.js 3.1.3\n if (a === b) return true;\n\n if (a && b && typeof a == 'object' && typeof b == 'object') {\n if (a.constructor !== b.constructor) return false;\n\n var length, i, keys;\n if (Array.isArray(a)) {\n length = a.length;\n if (length != b.length) return false;\n for (i = length; i-- !== 0;)\n if (!equal(a[i], b[i])) return false;\n return true;\n }\n\n // START: Modifications:\n // 1. Extra `has &&` helpers in initial condition allow es6 code\n // to co-exist with es5.\n // 2. Replace `for of` with es5 compliant iteration using `for`.\n // Basically, take:\n //\n // ```js\n // for (i of a.entries())\n // if (!b.has(i[0])) return false;\n // ```\n //\n // ... and convert to:\n //\n // ```js\n // it = a.entries();\n // while (!(i = it.next()).done)\n // if (!b.has(i.value[0])) return false;\n // ```\n //\n // **Note**: `i` access switches to `i.value`.\n var it;\n if (hasMap && (a instanceof Map) && (b instanceof Map)) {\n if (a.size !== b.size) return false;\n it = a.entries();\n while (!(i = it.next()).done)\n if (!b.has(i.value[0])) return false;\n it = a.entries();\n while (!(i = it.next()).done)\n if (!equal(i.value[1], b.get(i.value[0]))) return false;\n return true;\n }\n\n if (hasSet && (a instanceof Set) && (b instanceof Set)) {\n if (a.size !== b.size) return false;\n it = a.entries();\n while (!(i = it.next()).done)\n if (!b.has(i.value[0])) return false;\n return true;\n }\n // END: Modifications\n\n if (hasArrayBuffer && ArrayBuffer.isView(a) && ArrayBuffer.isView(b)) {\n length = a.length;\n if (length != b.length) return false;\n for (i = length; i-- !== 0;)\n if (a[i] !== b[i]) return false;\n return true;\n }\n\n if (a.constructor === RegExp) return a.source === b.source && a.flags === b.flags;\n // START: Modifications:\n // Apply guards for `Object.create(null)` handling. See:\n // - https://github.com/FormidableLabs/react-fast-compare/issues/64\n // - https://github.com/epoberezkin/fast-deep-equal/issues/49\n if (a.valueOf !== Object.prototype.valueOf && typeof a.valueOf === 'function' && typeof b.valueOf === 'function') return a.valueOf() === b.valueOf();\n if (a.toString !== Object.prototype.toString && typeof a.toString === 'function' && typeof b.toString === 'function') return a.toString() === b.toString();\n // END: Modifications\n\n keys = Object.keys(a);\n length = keys.length;\n if (length !== Object.keys(b).length) return false;\n\n for (i = length; i-- !== 0;)\n if (!Object.prototype.hasOwnProperty.call(b, keys[i])) return false;\n // END: fast-deep-equal\n\n // START: react-fast-compare\n // custom handling for DOM elements\n if (hasElementType && a instanceof Element) return false;\n\n // custom handling for React/Preact\n for (i = length; i-- !== 0;) {\n if ((keys[i] === '_owner' || keys[i] === '__v' || keys[i] === '__o') && a.$$typeof) {\n // React-specific: avoid traversing React elements' _owner\n // Preact-specific: avoid traversing Preact elements' __v and __o\n // __v = $_original / $_vnode\n // __o = $_owner\n // These properties contain circular references and are not needed when\n // comparing the actual elements (and not their owners)\n // .$$typeof and ._store on just reasonable markers of elements\n\n continue;\n }\n\n // all other properties should be traversed as usual\n if (!equal(a[keys[i]], b[keys[i]])) return false;\n }\n // END: react-fast-compare\n\n // START: fast-deep-equal\n return true;\n }\n\n return a !== a && b !== b;\n}\n// end fast-deep-equal\n\nmodule.exports = function isEqual(a, b) {\n try {\n return equal(a, b);\n } catch (error) {\n if (((error.message || '').match(/stack|recursion/i))) {\n // warn on circular references, don't crash\n // browsers give this different errors name and messages:\n // chrome/safari: \"RangeError\", \"Maximum call stack size exceeded\"\n // firefox: \"InternalError\", too much recursion\"\n // edge: \"Error\", \"Out of stack space\"\n console.warn('react-fast-compare cannot handle circular refs');\n return false;\n }\n // some other error. we should definitely know about these\n throw error;\n }\n};\n","/*\nobject-assign\n(c) Sindre Sorhus\n@license MIT\n*/\n\n'use strict';\n/* eslint-disable no-unused-vars */\nvar getOwnPropertySymbols = Object.getOwnPropertySymbols;\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\nvar propIsEnumerable = Object.prototype.propertyIsEnumerable;\n\nfunction toObject(val) {\n\tif (val === null || val === undefined) {\n\t\tthrow new TypeError('Object.assign cannot be called with null or undefined');\n\t}\n\n\treturn Object(val);\n}\n\nfunction shouldUseNative() {\n\ttry {\n\t\tif (!Object.assign) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Detect buggy property enumeration order in older V8 versions.\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=4118\n\t\tvar test1 = new String('abc'); // eslint-disable-line no-new-wrappers\n\t\ttest1[5] = 'de';\n\t\tif (Object.getOwnPropertyNames(test1)[0] === '5') {\n\t\t\treturn false;\n\t\t}\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=3056\n\t\tvar test2 = {};\n\t\tfor (var i = 0; i < 10; i++) {\n\t\t\ttest2['_' + String.fromCharCode(i)] = i;\n\t\t}\n\t\tvar order2 = Object.getOwnPropertyNames(test2).map(function (n) {\n\t\t\treturn test2[n];\n\t\t});\n\t\tif (order2.join('') !== '0123456789') {\n\t\t\treturn false;\n\t\t}\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=3056\n\t\tvar test3 = {};\n\t\t'abcdefghijklmnopqrst'.split('').forEach(function (letter) {\n\t\t\ttest3[letter] = letter;\n\t\t});\n\t\tif (Object.keys(Object.assign({}, test3)).join('') !==\n\t\t\t\t'abcdefghijklmnopqrst') {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn true;\n\t} catch (err) {\n\t\t// We don't expect any of the above to throw, but better to be safe.\n\t\treturn false;\n\t}\n}\n\nmodule.exports = shouldUseNative() ? Object.assign : function (target, source) {\n\tvar from;\n\tvar to = toObject(target);\n\tvar symbols;\n\n\tfor (var s = 1; s < arguments.length; s++) {\n\t\tfrom = Object(arguments[s]);\n\n\t\tfor (var key in from) {\n\t\t\tif (hasOwnProperty.call(from, key)) {\n\t\t\t\tto[key] = from[key];\n\t\t\t}\n\t\t}\n\n\t\tif (getOwnPropertySymbols) {\n\t\t\tsymbols = getOwnPropertySymbols(from);\n\t\t\tfor (var i = 0; i < symbols.length; i++) {\n\t\t\t\tif (propIsEnumerable.call(from, symbols[i])) {\n\t\t\t\t\tto[symbols[i]] = from[symbols[i]];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn to;\n};\n","import PropTypes from 'prop-types';\nimport withSideEffect from 'react-side-effect';\nimport isEqual from 'react-fast-compare';\nimport React from 'react';\nimport objectAssign from 'object-assign';\n\nvar ATTRIBUTE_NAMES = {\n BODY: \"bodyAttributes\",\n HTML: \"htmlAttributes\",\n TITLE: \"titleAttributes\"\n};\n\nvar TAG_NAMES = {\n BASE: \"base\",\n BODY: \"body\",\n HEAD: \"head\",\n HTML: \"html\",\n LINK: \"link\",\n META: \"meta\",\n NOSCRIPT: \"noscript\",\n SCRIPT: \"script\",\n STYLE: \"style\",\n TITLE: \"title\"\n};\n\nvar VALID_TAG_NAMES = Object.keys(TAG_NAMES).map(function (name) {\n return TAG_NAMES[name];\n});\n\nvar TAG_PROPERTIES = {\n CHARSET: \"charset\",\n CSS_TEXT: \"cssText\",\n HREF: \"href\",\n HTTPEQUIV: \"http-equiv\",\n INNER_HTML: \"innerHTML\",\n ITEM_PROP: \"itemprop\",\n NAME: \"name\",\n PROPERTY: \"property\",\n REL: \"rel\",\n SRC: \"src\",\n TARGET: \"target\"\n};\n\nvar REACT_TAG_MAP = {\n accesskey: \"accessKey\",\n charset: \"charSet\",\n class: \"className\",\n contenteditable: \"contentEditable\",\n contextmenu: \"contextMenu\",\n \"http-equiv\": \"httpEquiv\",\n itemprop: \"itemProp\",\n tabindex: \"tabIndex\"\n};\n\nvar HELMET_PROPS = {\n DEFAULT_TITLE: \"defaultTitle\",\n DEFER: \"defer\",\n ENCODE_SPECIAL_CHARACTERS: \"encodeSpecialCharacters\",\n ON_CHANGE_CLIENT_STATE: \"onChangeClientState\",\n TITLE_TEMPLATE: \"titleTemplate\"\n};\n\nvar HTML_TAG_MAP = Object.keys(REACT_TAG_MAP).reduce(function (obj, key) {\n obj[REACT_TAG_MAP[key]] = key;\n return obj;\n}, {});\n\nvar SELF_CLOSING_TAGS = [TAG_NAMES.NOSCRIPT, TAG_NAMES.SCRIPT, TAG_NAMES.STYLE];\n\nvar HELMET_ATTRIBUTE = \"data-react-helmet\";\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) {\n return typeof obj;\n} : function (obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n};\n\nvar classCallCheck = function (instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n};\n\nvar createClass = function () {\n function defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n\n return function (Constructor, protoProps, staticProps) {\n if (protoProps) defineProperties(Constructor.prototype, protoProps);\n if (staticProps) defineProperties(Constructor, staticProps);\n return Constructor;\n };\n}();\n\nvar _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n};\n\nvar inherits = function (subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass);\n }\n\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass;\n};\n\nvar objectWithoutProperties = function (obj, keys) {\n var target = {};\n\n for (var i in obj) {\n if (keys.indexOf(i) >= 0) continue;\n if (!Object.prototype.hasOwnProperty.call(obj, i)) continue;\n target[i] = obj[i];\n }\n\n return target;\n};\n\nvar possibleConstructorReturn = function (self, call) {\n if (!self) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self;\n};\n\nvar encodeSpecialCharacters = function encodeSpecialCharacters(str) {\n var encode = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n\n if (encode === false) {\n return String(str);\n }\n\n return String(str).replace(/&/g, \"&\").replace(//g, \">\").replace(/\"/g, \""\").replace(/'/g, \"'\");\n};\n\nvar getTitleFromPropsList = function getTitleFromPropsList(propsList) {\n var innermostTitle = getInnermostProperty(propsList, TAG_NAMES.TITLE);\n var innermostTemplate = getInnermostProperty(propsList, HELMET_PROPS.TITLE_TEMPLATE);\n\n if (innermostTemplate && innermostTitle) {\n // use function arg to avoid need to escape $ characters\n return innermostTemplate.replace(/%s/g, function () {\n return Array.isArray(innermostTitle) ? innermostTitle.join(\"\") : innermostTitle;\n });\n }\n\n var innermostDefaultTitle = getInnermostProperty(propsList, HELMET_PROPS.DEFAULT_TITLE);\n\n return innermostTitle || innermostDefaultTitle || undefined;\n};\n\nvar getOnChangeClientState = function getOnChangeClientState(propsList) {\n return getInnermostProperty(propsList, HELMET_PROPS.ON_CHANGE_CLIENT_STATE) || function () {};\n};\n\nvar getAttributesFromPropsList = function getAttributesFromPropsList(tagType, propsList) {\n return propsList.filter(function (props) {\n return typeof props[tagType] !== \"undefined\";\n }).map(function (props) {\n return props[tagType];\n }).reduce(function (tagAttrs, current) {\n return _extends({}, tagAttrs, current);\n }, {});\n};\n\nvar getBaseTagFromPropsList = function getBaseTagFromPropsList(primaryAttributes, propsList) {\n return propsList.filter(function (props) {\n return typeof props[TAG_NAMES.BASE] !== \"undefined\";\n }).map(function (props) {\n return props[TAG_NAMES.BASE];\n }).reverse().reduce(function (innermostBaseTag, tag) {\n if (!innermostBaseTag.length) {\n var keys = Object.keys(tag);\n\n for (var i = 0; i < keys.length; i++) {\n var attributeKey = keys[i];\n var lowerCaseAttributeKey = attributeKey.toLowerCase();\n\n if (primaryAttributes.indexOf(lowerCaseAttributeKey) !== -1 && tag[lowerCaseAttributeKey]) {\n return innermostBaseTag.concat(tag);\n }\n }\n }\n\n return innermostBaseTag;\n }, []);\n};\n\nvar getTagsFromPropsList = function getTagsFromPropsList(tagName, primaryAttributes, propsList) {\n // Calculate list of tags, giving priority innermost component (end of the propslist)\n var approvedSeenTags = {};\n\n return propsList.filter(function (props) {\n if (Array.isArray(props[tagName])) {\n return true;\n }\n if (typeof props[tagName] !== \"undefined\") {\n warn(\"Helmet: \" + tagName + \" should be of type \\\"Array\\\". Instead found type \\\"\" + _typeof(props[tagName]) + \"\\\"\");\n }\n return false;\n }).map(function (props) {\n return props[tagName];\n }).reverse().reduce(function (approvedTags, instanceTags) {\n var instanceSeenTags = {};\n\n instanceTags.filter(function (tag) {\n var primaryAttributeKey = void 0;\n var keys = Object.keys(tag);\n for (var i = 0; i < keys.length; i++) {\n var attributeKey = keys[i];\n var lowerCaseAttributeKey = attributeKey.toLowerCase();\n\n // Special rule with link tags, since rel and href are both primary tags, rel takes priority\n if (primaryAttributes.indexOf(lowerCaseAttributeKey) !== -1 && !(primaryAttributeKey === TAG_PROPERTIES.REL && tag[primaryAttributeKey].toLowerCase() === \"canonical\") && !(lowerCaseAttributeKey === TAG_PROPERTIES.REL && tag[lowerCaseAttributeKey].toLowerCase() === \"stylesheet\")) {\n primaryAttributeKey = lowerCaseAttributeKey;\n }\n // Special case for innerHTML which doesn't work lowercased\n if (primaryAttributes.indexOf(attributeKey) !== -1 && (attributeKey === TAG_PROPERTIES.INNER_HTML || attributeKey === TAG_PROPERTIES.CSS_TEXT || attributeKey === TAG_PROPERTIES.ITEM_PROP)) {\n primaryAttributeKey = attributeKey;\n }\n }\n\n if (!primaryAttributeKey || !tag[primaryAttributeKey]) {\n return false;\n }\n\n var value = tag[primaryAttributeKey].toLowerCase();\n\n if (!approvedSeenTags[primaryAttributeKey]) {\n approvedSeenTags[primaryAttributeKey] = {};\n }\n\n if (!instanceSeenTags[primaryAttributeKey]) {\n instanceSeenTags[primaryAttributeKey] = {};\n }\n\n if (!approvedSeenTags[primaryAttributeKey][value]) {\n instanceSeenTags[primaryAttributeKey][value] = true;\n return true;\n }\n\n return false;\n }).reverse().forEach(function (tag) {\n return approvedTags.push(tag);\n });\n\n // Update seen tags with tags from this instance\n var keys = Object.keys(instanceSeenTags);\n for (var i = 0; i < keys.length; i++) {\n var attributeKey = keys[i];\n var tagUnion = objectAssign({}, approvedSeenTags[attributeKey], instanceSeenTags[attributeKey]);\n\n approvedSeenTags[attributeKey] = tagUnion;\n }\n\n return approvedTags;\n }, []).reverse();\n};\n\nvar getInnermostProperty = function getInnermostProperty(propsList, property) {\n for (var i = propsList.length - 1; i >= 0; i--) {\n var props = propsList[i];\n\n if (props.hasOwnProperty(property)) {\n return props[property];\n }\n }\n\n return null;\n};\n\nvar reducePropsToState = function reducePropsToState(propsList) {\n return {\n baseTag: getBaseTagFromPropsList([TAG_PROPERTIES.HREF, TAG_PROPERTIES.TARGET], propsList),\n bodyAttributes: getAttributesFromPropsList(ATTRIBUTE_NAMES.BODY, propsList),\n defer: getInnermostProperty(propsList, HELMET_PROPS.DEFER),\n encode: getInnermostProperty(propsList, HELMET_PROPS.ENCODE_SPECIAL_CHARACTERS),\n htmlAttributes: getAttributesFromPropsList(ATTRIBUTE_NAMES.HTML, propsList),\n linkTags: getTagsFromPropsList(TAG_NAMES.LINK, [TAG_PROPERTIES.REL, TAG_PROPERTIES.HREF], propsList),\n metaTags: getTagsFromPropsList(TAG_NAMES.META, [TAG_PROPERTIES.NAME, TAG_PROPERTIES.CHARSET, TAG_PROPERTIES.HTTPEQUIV, TAG_PROPERTIES.PROPERTY, TAG_PROPERTIES.ITEM_PROP], propsList),\n noscriptTags: getTagsFromPropsList(TAG_NAMES.NOSCRIPT, [TAG_PROPERTIES.INNER_HTML], propsList),\n onChangeClientState: getOnChangeClientState(propsList),\n scriptTags: getTagsFromPropsList(TAG_NAMES.SCRIPT, [TAG_PROPERTIES.SRC, TAG_PROPERTIES.INNER_HTML], propsList),\n styleTags: getTagsFromPropsList(TAG_NAMES.STYLE, [TAG_PROPERTIES.CSS_TEXT], propsList),\n title: getTitleFromPropsList(propsList),\n titleAttributes: getAttributesFromPropsList(ATTRIBUTE_NAMES.TITLE, propsList)\n };\n};\n\nvar rafPolyfill = function () {\n var clock = Date.now();\n\n return function (callback) {\n var currentTime = Date.now();\n\n if (currentTime - clock > 16) {\n clock = currentTime;\n callback(currentTime);\n } else {\n setTimeout(function () {\n rafPolyfill(callback);\n }, 0);\n }\n };\n}();\n\nvar cafPolyfill = function cafPolyfill(id) {\n return clearTimeout(id);\n};\n\nvar requestAnimationFrame = typeof window !== \"undefined\" ? window.requestAnimationFrame && window.requestAnimationFrame.bind(window) || window.webkitRequestAnimationFrame || window.mozRequestAnimationFrame || rafPolyfill : global.requestAnimationFrame || rafPolyfill;\n\nvar cancelAnimationFrame = typeof window !== \"undefined\" ? window.cancelAnimationFrame || window.webkitCancelAnimationFrame || window.mozCancelAnimationFrame || cafPolyfill : global.cancelAnimationFrame || cafPolyfill;\n\nvar warn = function warn(msg) {\n return console && typeof console.warn === \"function\" && console.warn(msg);\n};\n\nvar _helmetCallback = null;\n\nvar handleClientStateChange = function handleClientStateChange(newState) {\n if (_helmetCallback) {\n cancelAnimationFrame(_helmetCallback);\n }\n\n if (newState.defer) {\n _helmetCallback = requestAnimationFrame(function () {\n commitTagChanges(newState, function () {\n _helmetCallback = null;\n });\n });\n } else {\n commitTagChanges(newState);\n _helmetCallback = null;\n }\n};\n\nvar commitTagChanges = function commitTagChanges(newState, cb) {\n var baseTag = newState.baseTag,\n bodyAttributes = newState.bodyAttributes,\n htmlAttributes = newState.htmlAttributes,\n linkTags = newState.linkTags,\n metaTags = newState.metaTags,\n noscriptTags = newState.noscriptTags,\n onChangeClientState = newState.onChangeClientState,\n scriptTags = newState.scriptTags,\n styleTags = newState.styleTags,\n title = newState.title,\n titleAttributes = newState.titleAttributes;\n\n updateAttributes(TAG_NAMES.BODY, bodyAttributes);\n updateAttributes(TAG_NAMES.HTML, htmlAttributes);\n\n updateTitle(title, titleAttributes);\n\n var tagUpdates = {\n baseTag: updateTags(TAG_NAMES.BASE, baseTag),\n linkTags: updateTags(TAG_NAMES.LINK, linkTags),\n metaTags: updateTags(TAG_NAMES.META, metaTags),\n noscriptTags: updateTags(TAG_NAMES.NOSCRIPT, noscriptTags),\n scriptTags: updateTags(TAG_NAMES.SCRIPT, scriptTags),\n styleTags: updateTags(TAG_NAMES.STYLE, styleTags)\n };\n\n var addedTags = {};\n var removedTags = {};\n\n Object.keys(tagUpdates).forEach(function (tagType) {\n var _tagUpdates$tagType = tagUpdates[tagType],\n newTags = _tagUpdates$tagType.newTags,\n oldTags = _tagUpdates$tagType.oldTags;\n\n\n if (newTags.length) {\n addedTags[tagType] = newTags;\n }\n if (oldTags.length) {\n removedTags[tagType] = tagUpdates[tagType].oldTags;\n }\n });\n\n cb && cb();\n\n onChangeClientState(newState, addedTags, removedTags);\n};\n\nvar flattenArray = function flattenArray(possibleArray) {\n return Array.isArray(possibleArray) ? possibleArray.join(\"\") : possibleArray;\n};\n\nvar updateTitle = function updateTitle(title, attributes) {\n if (typeof title !== \"undefined\" && document.title !== title) {\n document.title = flattenArray(title);\n }\n\n updateAttributes(TAG_NAMES.TITLE, attributes);\n};\n\nvar updateAttributes = function updateAttributes(tagName, attributes) {\n var elementTag = document.getElementsByTagName(tagName)[0];\n\n if (!elementTag) {\n return;\n }\n\n var helmetAttributeString = elementTag.getAttribute(HELMET_ATTRIBUTE);\n var helmetAttributes = helmetAttributeString ? helmetAttributeString.split(\",\") : [];\n var attributesToRemove = [].concat(helmetAttributes);\n var attributeKeys = Object.keys(attributes);\n\n for (var i = 0; i < attributeKeys.length; i++) {\n var attribute = attributeKeys[i];\n var value = attributes[attribute] || \"\";\n\n if (elementTag.getAttribute(attribute) !== value) {\n elementTag.setAttribute(attribute, value);\n }\n\n if (helmetAttributes.indexOf(attribute) === -1) {\n helmetAttributes.push(attribute);\n }\n\n var indexToSave = attributesToRemove.indexOf(attribute);\n if (indexToSave !== -1) {\n attributesToRemove.splice(indexToSave, 1);\n }\n }\n\n for (var _i = attributesToRemove.length - 1; _i >= 0; _i--) {\n elementTag.removeAttribute(attributesToRemove[_i]);\n }\n\n if (helmetAttributes.length === attributesToRemove.length) {\n elementTag.removeAttribute(HELMET_ATTRIBUTE);\n } else if (elementTag.getAttribute(HELMET_ATTRIBUTE) !== attributeKeys.join(\",\")) {\n elementTag.setAttribute(HELMET_ATTRIBUTE, attributeKeys.join(\",\"));\n }\n};\n\nvar updateTags = function updateTags(type, tags) {\n var headElement = document.head || document.querySelector(TAG_NAMES.HEAD);\n var tagNodes = headElement.querySelectorAll(type + \"[\" + HELMET_ATTRIBUTE + \"]\");\n var oldTags = Array.prototype.slice.call(tagNodes);\n var newTags = [];\n var indexToDelete = void 0;\n\n if (tags && tags.length) {\n tags.forEach(function (tag) {\n var newElement = document.createElement(type);\n\n for (var attribute in tag) {\n if (tag.hasOwnProperty(attribute)) {\n if (attribute === TAG_PROPERTIES.INNER_HTML) {\n newElement.innerHTML = tag.innerHTML;\n } else if (attribute === TAG_PROPERTIES.CSS_TEXT) {\n if (newElement.styleSheet) {\n newElement.styleSheet.cssText = tag.cssText;\n } else {\n newElement.appendChild(document.createTextNode(tag.cssText));\n }\n } else {\n var value = typeof tag[attribute] === \"undefined\" ? \"\" : tag[attribute];\n newElement.setAttribute(attribute, value);\n }\n }\n }\n\n newElement.setAttribute(HELMET_ATTRIBUTE, \"true\");\n\n // Remove a duplicate tag from domTagstoRemove, so it isn't cleared.\n if (oldTags.some(function (existingTag, index) {\n indexToDelete = index;\n return newElement.isEqualNode(existingTag);\n })) {\n oldTags.splice(indexToDelete, 1);\n } else {\n newTags.push(newElement);\n }\n });\n }\n\n oldTags.forEach(function (tag) {\n return tag.parentNode.removeChild(tag);\n });\n newTags.forEach(function (tag) {\n return headElement.appendChild(tag);\n });\n\n return {\n oldTags: oldTags,\n newTags: newTags\n };\n};\n\nvar generateElementAttributesAsString = function generateElementAttributesAsString(attributes) {\n return Object.keys(attributes).reduce(function (str, key) {\n var attr = typeof attributes[key] !== \"undefined\" ? key + \"=\\\"\" + attributes[key] + \"\\\"\" : \"\" + key;\n return str ? str + \" \" + attr : attr;\n }, \"\");\n};\n\nvar generateTitleAsString = function generateTitleAsString(type, title, attributes, encode) {\n var attributeString = generateElementAttributesAsString(attributes);\n var flattenedTitle = flattenArray(title);\n return attributeString ? \"<\" + type + \" \" + HELMET_ATTRIBUTE + \"=\\\"true\\\" \" + attributeString + \">\" + encodeSpecialCharacters(flattenedTitle, encode) + \"\" : \"<\" + type + \" \" + HELMET_ATTRIBUTE + \"=\\\"true\\\">\" + encodeSpecialCharacters(flattenedTitle, encode) + \"\";\n};\n\nvar generateTagsAsString = function generateTagsAsString(type, tags, encode) {\n return tags.reduce(function (str, tag) {\n var attributeHtml = Object.keys(tag).filter(function (attribute) {\n return !(attribute === TAG_PROPERTIES.INNER_HTML || attribute === TAG_PROPERTIES.CSS_TEXT);\n }).reduce(function (string, attribute) {\n var attr = typeof tag[attribute] === \"undefined\" ? attribute : attribute + \"=\\\"\" + encodeSpecialCharacters(tag[attribute], encode) + \"\\\"\";\n return string ? string + \" \" + attr : attr;\n }, \"\");\n\n var tagContent = tag.innerHTML || tag.cssText || \"\";\n\n var isSelfClosing = SELF_CLOSING_TAGS.indexOf(type) === -1;\n\n return str + \"<\" + type + \" \" + HELMET_ATTRIBUTE + \"=\\\"true\\\" \" + attributeHtml + (isSelfClosing ? \"/>\" : \">\" + tagContent + \"\");\n }, \"\");\n};\n\nvar convertElementAttributestoReactProps = function convertElementAttributestoReactProps(attributes) {\n var initProps = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n return Object.keys(attributes).reduce(function (obj, key) {\n obj[REACT_TAG_MAP[key] || key] = attributes[key];\n return obj;\n }, initProps);\n};\n\nvar convertReactPropstoHtmlAttributes = function convertReactPropstoHtmlAttributes(props) {\n var initAttributes = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n return Object.keys(props).reduce(function (obj, key) {\n obj[HTML_TAG_MAP[key] || key] = props[key];\n return obj;\n }, initAttributes);\n};\n\nvar generateTitleAsReactComponent = function generateTitleAsReactComponent(type, title, attributes) {\n var _initProps;\n\n // assigning into an array to define toString function on it\n var initProps = (_initProps = {\n key: title\n }, _initProps[HELMET_ATTRIBUTE] = true, _initProps);\n var props = convertElementAttributestoReactProps(attributes, initProps);\n\n return [React.createElement(TAG_NAMES.TITLE, props, title)];\n};\n\nvar generateTagsAsReactComponent = function generateTagsAsReactComponent(type, tags) {\n return tags.map(function (tag, i) {\n var _mappedTag;\n\n var mappedTag = (_mappedTag = {\n key: i\n }, _mappedTag[HELMET_ATTRIBUTE] = true, _mappedTag);\n\n Object.keys(tag).forEach(function (attribute) {\n var mappedAttribute = REACT_TAG_MAP[attribute] || attribute;\n\n if (mappedAttribute === TAG_PROPERTIES.INNER_HTML || mappedAttribute === TAG_PROPERTIES.CSS_TEXT) {\n var content = tag.innerHTML || tag.cssText;\n mappedTag.dangerouslySetInnerHTML = { __html: content };\n } else {\n mappedTag[mappedAttribute] = tag[attribute];\n }\n });\n\n return React.createElement(type, mappedTag);\n });\n};\n\nvar getMethodsForTag = function getMethodsForTag(type, tags, encode) {\n switch (type) {\n case TAG_NAMES.TITLE:\n return {\n toComponent: function toComponent() {\n return generateTitleAsReactComponent(type, tags.title, tags.titleAttributes, encode);\n },\n toString: function toString() {\n return generateTitleAsString(type, tags.title, tags.titleAttributes, encode);\n }\n };\n case ATTRIBUTE_NAMES.BODY:\n case ATTRIBUTE_NAMES.HTML:\n return {\n toComponent: function toComponent() {\n return convertElementAttributestoReactProps(tags);\n },\n toString: function toString() {\n return generateElementAttributesAsString(tags);\n }\n };\n default:\n return {\n toComponent: function toComponent() {\n return generateTagsAsReactComponent(type, tags);\n },\n toString: function toString() {\n return generateTagsAsString(type, tags, encode);\n }\n };\n }\n};\n\nvar mapStateOnServer = function mapStateOnServer(_ref) {\n var baseTag = _ref.baseTag,\n bodyAttributes = _ref.bodyAttributes,\n encode = _ref.encode,\n htmlAttributes = _ref.htmlAttributes,\n linkTags = _ref.linkTags,\n metaTags = _ref.metaTags,\n noscriptTags = _ref.noscriptTags,\n scriptTags = _ref.scriptTags,\n styleTags = _ref.styleTags,\n _ref$title = _ref.title,\n title = _ref$title === undefined ? \"\" : _ref$title,\n titleAttributes = _ref.titleAttributes;\n return {\n base: getMethodsForTag(TAG_NAMES.BASE, baseTag, encode),\n bodyAttributes: getMethodsForTag(ATTRIBUTE_NAMES.BODY, bodyAttributes, encode),\n htmlAttributes: getMethodsForTag(ATTRIBUTE_NAMES.HTML, htmlAttributes, encode),\n link: getMethodsForTag(TAG_NAMES.LINK, linkTags, encode),\n meta: getMethodsForTag(TAG_NAMES.META, metaTags, encode),\n noscript: getMethodsForTag(TAG_NAMES.NOSCRIPT, noscriptTags, encode),\n script: getMethodsForTag(TAG_NAMES.SCRIPT, scriptTags, encode),\n style: getMethodsForTag(TAG_NAMES.STYLE, styleTags, encode),\n title: getMethodsForTag(TAG_NAMES.TITLE, { title: title, titleAttributes: titleAttributes }, encode)\n };\n};\n\nvar Helmet = function Helmet(Component) {\n var _class, _temp;\n\n return _temp = _class = function (_React$Component) {\n inherits(HelmetWrapper, _React$Component);\n\n function HelmetWrapper() {\n classCallCheck(this, HelmetWrapper);\n return possibleConstructorReturn(this, _React$Component.apply(this, arguments));\n }\n\n HelmetWrapper.prototype.shouldComponentUpdate = function shouldComponentUpdate(nextProps) {\n return !isEqual(this.props, nextProps);\n };\n\n HelmetWrapper.prototype.mapNestedChildrenToProps = function mapNestedChildrenToProps(child, nestedChildren) {\n if (!nestedChildren) {\n return null;\n }\n\n switch (child.type) {\n case TAG_NAMES.SCRIPT:\n case TAG_NAMES.NOSCRIPT:\n return {\n innerHTML: nestedChildren\n };\n\n case TAG_NAMES.STYLE:\n return {\n cssText: nestedChildren\n };\n }\n\n throw new Error(\"<\" + child.type + \" /> elements are self-closing and can not contain children. Refer to our API for more information.\");\n };\n\n HelmetWrapper.prototype.flattenArrayTypeChildren = function flattenArrayTypeChildren(_ref) {\n var _babelHelpers$extends;\n\n var child = _ref.child,\n arrayTypeChildren = _ref.arrayTypeChildren,\n newChildProps = _ref.newChildProps,\n nestedChildren = _ref.nestedChildren;\n\n return _extends({}, arrayTypeChildren, (_babelHelpers$extends = {}, _babelHelpers$extends[child.type] = [].concat(arrayTypeChildren[child.type] || [], [_extends({}, newChildProps, this.mapNestedChildrenToProps(child, nestedChildren))]), _babelHelpers$extends));\n };\n\n HelmetWrapper.prototype.mapObjectTypeChildren = function mapObjectTypeChildren(_ref2) {\n var _babelHelpers$extends2, _babelHelpers$extends3;\n\n var child = _ref2.child,\n newProps = _ref2.newProps,\n newChildProps = _ref2.newChildProps,\n nestedChildren = _ref2.nestedChildren;\n\n switch (child.type) {\n case TAG_NAMES.TITLE:\n return _extends({}, newProps, (_babelHelpers$extends2 = {}, _babelHelpers$extends2[child.type] = nestedChildren, _babelHelpers$extends2.titleAttributes = _extends({}, newChildProps), _babelHelpers$extends2));\n\n case TAG_NAMES.BODY:\n return _extends({}, newProps, {\n bodyAttributes: _extends({}, newChildProps)\n });\n\n case TAG_NAMES.HTML:\n return _extends({}, newProps, {\n htmlAttributes: _extends({}, newChildProps)\n });\n }\n\n return _extends({}, newProps, (_babelHelpers$extends3 = {}, _babelHelpers$extends3[child.type] = _extends({}, newChildProps), _babelHelpers$extends3));\n };\n\n HelmetWrapper.prototype.mapArrayTypeChildrenToProps = function mapArrayTypeChildrenToProps(arrayTypeChildren, newProps) {\n var newFlattenedProps = _extends({}, newProps);\n\n Object.keys(arrayTypeChildren).forEach(function (arrayChildName) {\n var _babelHelpers$extends4;\n\n newFlattenedProps = _extends({}, newFlattenedProps, (_babelHelpers$extends4 = {}, _babelHelpers$extends4[arrayChildName] = arrayTypeChildren[arrayChildName], _babelHelpers$extends4));\n });\n\n return newFlattenedProps;\n };\n\n HelmetWrapper.prototype.warnOnInvalidChildren = function warnOnInvalidChildren(child, nestedChildren) {\n if (process.env.NODE_ENV !== \"production\") {\n if (!VALID_TAG_NAMES.some(function (name) {\n return child.type === name;\n })) {\n if (typeof child.type === \"function\") {\n return warn(\"You may be attempting to nest components within each other, which is not allowed. Refer to our API for more information.\");\n }\n\n return warn(\"Only elements types \" + VALID_TAG_NAMES.join(\", \") + \" are allowed. Helmet does not support rendering <\" + child.type + \"> elements. Refer to our API for more information.\");\n }\n\n if (nestedChildren && typeof nestedChildren !== \"string\" && (!Array.isArray(nestedChildren) || nestedChildren.some(function (nestedChild) {\n return typeof nestedChild !== \"string\";\n }))) {\n throw new Error(\"Helmet expects a string as a child of <\" + child.type + \">. Did you forget to wrap your children in braces? ( <\" + child.type + \">{``} ) Refer to our API for more information.\");\n }\n }\n\n return true;\n };\n\n HelmetWrapper.prototype.mapChildrenToProps = function mapChildrenToProps(children, newProps) {\n var _this2 = this;\n\n var arrayTypeChildren = {};\n\n React.Children.forEach(children, function (child) {\n if (!child || !child.props) {\n return;\n }\n\n var _child$props = child.props,\n nestedChildren = _child$props.children,\n childProps = objectWithoutProperties(_child$props, [\"children\"]);\n\n var newChildProps = convertReactPropstoHtmlAttributes(childProps);\n\n _this2.warnOnInvalidChildren(child, nestedChildren);\n\n switch (child.type) {\n case TAG_NAMES.LINK:\n case TAG_NAMES.META:\n case TAG_NAMES.NOSCRIPT:\n case TAG_NAMES.SCRIPT:\n case TAG_NAMES.STYLE:\n arrayTypeChildren = _this2.flattenArrayTypeChildren({\n child: child,\n arrayTypeChildren: arrayTypeChildren,\n newChildProps: newChildProps,\n nestedChildren: nestedChildren\n });\n break;\n\n default:\n newProps = _this2.mapObjectTypeChildren({\n child: child,\n newProps: newProps,\n newChildProps: newChildProps,\n nestedChildren: nestedChildren\n });\n break;\n }\n });\n\n newProps = this.mapArrayTypeChildrenToProps(arrayTypeChildren, newProps);\n return newProps;\n };\n\n HelmetWrapper.prototype.render = function render() {\n var _props = this.props,\n children = _props.children,\n props = objectWithoutProperties(_props, [\"children\"]);\n\n var newProps = _extends({}, props);\n\n if (children) {\n newProps = this.mapChildrenToProps(children, newProps);\n }\n\n return React.createElement(Component, newProps);\n };\n\n createClass(HelmetWrapper, null, [{\n key: \"canUseDOM\",\n\n\n // Component.peek comes from react-side-effect:\n // For testing, you may use a static peek() method available on the returned component.\n // It lets you get the current state without resetting the mounted instance stack.\n // Don’t use it for anything other than testing.\n\n /**\n * @param {Object} base: {\"target\": \"_blank\", \"href\": \"http://mysite.com/\"}\n * @param {Object} bodyAttributes: {\"className\": \"root\"}\n * @param {String} defaultTitle: \"Default Title\"\n * @param {Boolean} defer: true\n * @param {Boolean} encodeSpecialCharacters: true\n * @param {Object} htmlAttributes: {\"lang\": \"en\", \"amp\": undefined}\n * @param {Array} link: [{\"rel\": \"canonical\", \"href\": \"http://mysite.com/example\"}]\n * @param {Array} meta: [{\"name\": \"description\", \"content\": \"Test description\"}]\n * @param {Array} noscript: [{\"innerHTML\": \" console.log(newState)\"\n * @param {Array} script: [{\"type\": \"text/javascript\", \"src\": \"http://mysite.com/js/test.js\"}]\n * @param {Array} style: [{\"type\": \"text/css\", \"cssText\": \"div { display: block; color: blue; }\"}]\n * @param {String} title: \"Title\"\n * @param {Object} titleAttributes: {\"itemprop\": \"name\"}\n * @param {String} titleTemplate: \"MySite.com - %s\"\n */\n set: function set$$1(canUseDOM) {\n Component.canUseDOM = canUseDOM;\n }\n }]);\n return HelmetWrapper;\n }(React.Component), _class.propTypes = {\n base: PropTypes.object,\n bodyAttributes: PropTypes.object,\n children: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.node), PropTypes.node]),\n defaultTitle: PropTypes.string,\n defer: PropTypes.bool,\n encodeSpecialCharacters: PropTypes.bool,\n htmlAttributes: PropTypes.object,\n link: PropTypes.arrayOf(PropTypes.object),\n meta: PropTypes.arrayOf(PropTypes.object),\n noscript: PropTypes.arrayOf(PropTypes.object),\n onChangeClientState: PropTypes.func,\n script: PropTypes.arrayOf(PropTypes.object),\n style: PropTypes.arrayOf(PropTypes.object),\n title: PropTypes.string,\n titleAttributes: PropTypes.object,\n titleTemplate: PropTypes.string\n }, _class.defaultProps = {\n defer: true,\n encodeSpecialCharacters: true\n }, _class.peek = Component.peek, _class.rewind = function () {\n var mappedState = Component.rewind();\n if (!mappedState) {\n // provide fallback if mappedState is undefined\n mappedState = mapStateOnServer({\n baseTag: [],\n bodyAttributes: {},\n encodeSpecialCharacters: true,\n htmlAttributes: {},\n linkTags: [],\n metaTags: [],\n noscriptTags: [],\n scriptTags: [],\n styleTags: [],\n title: \"\",\n titleAttributes: {}\n });\n }\n\n return mappedState;\n }, _temp;\n};\n\nvar NullComponent = function NullComponent() {\n return null;\n};\n\nvar HelmetSideEffects = withSideEffect(reducePropsToState, handleClientStateChange, mapStateOnServer)(NullComponent);\n\nvar HelmetExport = Helmet(HelmetSideEffects);\nHelmetExport.renderStatic = HelmetExport.rewind;\n\nexport default HelmetExport;\nexport { HelmetExport as Helmet };\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar ContentRect = function (target) {\n if ('getBBox' in target) {\n var box = target.getBBox();\n return Object.freeze({\n height: box.height,\n left: 0,\n top: 0,\n width: box.width,\n });\n }\n else { // if (target instanceof HTMLElement) { // also includes all other non-SVGGraphicsElements\n var styles = window.getComputedStyle(target);\n return Object.freeze({\n height: parseFloat(styles.height || '0'),\n left: parseFloat(styles.paddingLeft || '0'),\n top: parseFloat(styles.paddingTop || '0'),\n width: parseFloat(styles.width || '0'),\n });\n }\n};\nexports.ContentRect = ContentRect;\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29udGVudFJlY3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvQ29udGVudFJlY3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFPQSxJQUFNLFdBQVcsR0FBRyxVQUFDLE1BQWU7SUFDaEMsSUFBSSxTQUFTLElBQUssTUFBNkIsRUFBRTtRQUM3QyxJQUFNLEdBQUcsR0FBSSxNQUE2QixDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ3JELE9BQU8sTUFBTSxDQUFDLE1BQU0sQ0FBQztZQUNqQixNQUFNLEVBQUUsR0FBRyxDQUFDLE1BQU07WUFDbEIsSUFBSSxFQUFFLENBQUM7WUFDUCxHQUFHLEVBQUUsQ0FBQztZQUNOLEtBQUssRUFBRSxHQUFHLENBQUMsS0FBSztTQUNuQixDQUFDLENBQUM7S0FDTjtTQUFNLEVBQUUsMEZBQTBGO1FBQy9GLElBQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUMvQyxPQUFPLE1BQU0sQ0FBQyxNQUFNLENBQUM7WUFDakIsTUFBTSxFQUFFLFVBQVUsQ0FBQyxNQUFNLENBQUMsTUFBTSxJQUFJLEdBQUcsQ0FBQztZQUN4QyxJQUFJLEVBQUUsVUFBVSxDQUFDLE1BQU0sQ0FBQyxXQUFXLElBQUksR0FBRyxDQUFDO1lBQzNDLEdBQUcsRUFBRSxVQUFVLENBQUMsTUFBTSxDQUFDLFVBQVUsSUFBSSxHQUFHLENBQUM7WUFDekMsS0FBSyxFQUFFLFVBQVUsQ0FBQyxNQUFNLENBQUMsS0FBSyxJQUFJLEdBQUcsQ0FBQztTQUN6QyxDQUFDLENBQUM7S0FDTjtBQUNMLENBQUMsQ0FBQztBQUVPLGtDQUFXIn0=","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar ContentRect_1 = require(\"./ContentRect\");\nvar ResizeObservation = /** @class */ (function () {\n function ResizeObservation(target) {\n this.target = target;\n this.$$broadcastWidth = this.$$broadcastHeight = 0;\n }\n Object.defineProperty(ResizeObservation.prototype, \"broadcastWidth\", {\n get: function () {\n return this.$$broadcastWidth;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ResizeObservation.prototype, \"broadcastHeight\", {\n get: function () {\n return this.$$broadcastHeight;\n },\n enumerable: true,\n configurable: true\n });\n ResizeObservation.prototype.isActive = function () {\n var cr = ContentRect_1.ContentRect(this.target);\n return !!cr\n && (cr.width !== this.broadcastWidth\n || cr.height !== this.broadcastHeight);\n };\n return ResizeObservation;\n}());\nexports.ResizeObservation = ResizeObservation;\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUmVzaXplT2JzZXJ2YXRpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvUmVzaXplT2JzZXJ2YXRpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSw2Q0FBNEM7QUFFNUM7SUFlSSwyQkFBWSxNQUFlO1FBQ3ZCLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsaUJBQWlCLEdBQUcsQ0FBQyxDQUFDO0lBQ3ZELENBQUM7SUFWRCxzQkFBVyw2Q0FBYzthQUF6QjtZQUNJLE9BQU8sSUFBSSxDQUFDLGdCQUFnQixDQUFDO1FBQ2pDLENBQUM7OztPQUFBO0lBQ0Qsc0JBQVcsOENBQWU7YUFBMUI7WUFDSSxPQUFPLElBQUksQ0FBQyxpQkFBaUIsQ0FBQztRQUNsQyxDQUFDOzs7T0FBQTtJQU9NLG9DQUFRLEdBQWY7UUFDSSxJQUFNLEVBQUUsR0FBRyx5QkFBVyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUVwQyxPQUFPLENBQUMsQ0FBQyxFQUFFO2VBQ0osQ0FDQyxFQUFFLENBQUMsS0FBSyxLQUFLLElBQUksQ0FBQyxjQUFjO21CQUM3QixFQUFFLENBQUMsTUFBTSxLQUFLLElBQUksQ0FBQyxlQUFlLENBQ3hDLENBQUM7SUFDVixDQUFDO0lBQ0wsd0JBQUM7QUFBRCxDQUFDLEFBN0JELElBNkJDO0FBRVEsOENBQWlCIn0=","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar ContentRect_1 = require(\"./ContentRect\");\nvar ResizeObserverEntry = /** @class */ (function () {\n function ResizeObserverEntry(target) {\n this.target = target;\n this.contentRect = ContentRect_1.ContentRect(target);\n }\n return ResizeObserverEntry;\n}());\nexports.ResizeObserverEntry = ResizeObserverEntry;\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUmVzaXplT2JzZXJ2ZXJFbnRyeS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9SZXNpemVPYnNlcnZlckVudHJ5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsNkNBQTRDO0FBRTVDO0lBR0ksNkJBQVksTUFBZTtRQUN2QixJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztRQUNyQixJQUFJLENBQUMsV0FBVyxHQUFHLHlCQUFXLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDM0MsQ0FBQztJQUNMLDBCQUFDO0FBQUQsQ0FBQyxBQVBELElBT0M7QUFFUSxrREFBbUIifQ==","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar ResizeObservation_1 = require(\"./ResizeObservation\");\nvar ResizeObserverEntry_1 = require(\"./ResizeObserverEntry\");\nvar resizeObservers = [];\nvar ResizeObserver = /** @class */ (function () {\n function ResizeObserver(callback) {\n /** @internal */\n this.$$observationTargets = [];\n /** @internal */\n this.$$activeTargets = [];\n /** @internal */\n this.$$skippedTargets = [];\n var message = callbackGuard(callback);\n if (message) {\n throw TypeError(message);\n }\n this.$$callback = callback;\n }\n ResizeObserver.prototype.observe = function (target) {\n var message = targetGuard('observe', target);\n if (message) {\n throw TypeError(message);\n }\n var index = findTargetIndex(this.$$observationTargets, target);\n if (index >= 0) {\n return;\n }\n this.$$observationTargets.push(new ResizeObservation_1.ResizeObservation(target));\n registerResizeObserver(this);\n };\n ResizeObserver.prototype.unobserve = function (target) {\n var message = targetGuard('unobserve', target);\n if (message) {\n throw TypeError(message);\n }\n var index = findTargetIndex(this.$$observationTargets, target);\n if (index < 0) {\n return;\n }\n this.$$observationTargets.splice(index, 1);\n if (this.$$observationTargets.length === 0) {\n deregisterResizeObserver(this);\n }\n };\n ResizeObserver.prototype.disconnect = function () {\n this.$$observationTargets = [];\n this.$$activeTargets = [];\n deregisterResizeObserver(this);\n };\n return ResizeObserver;\n}());\nexports.ResizeObserver = ResizeObserver;\nfunction registerResizeObserver(resizeObserver) {\n var index = resizeObservers.indexOf(resizeObserver);\n if (index < 0) {\n resizeObservers.push(resizeObserver);\n startLoop();\n }\n}\nfunction deregisterResizeObserver(resizeObserver) {\n var index = resizeObservers.indexOf(resizeObserver);\n if (index >= 0) {\n resizeObservers.splice(index, 1);\n checkStopLoop();\n }\n}\nfunction callbackGuard(callback) {\n if (typeof (callback) === 'undefined') {\n return \"Failed to construct 'ResizeObserver': 1 argument required, but only 0 present.\";\n }\n if (typeof (callback) !== 'function') {\n return \"Failed to construct 'ResizeObserver': The callback provided as parameter 1 is not a function.\";\n }\n}\nfunction targetGuard(functionName, target) {\n if (typeof (target) === 'undefined') {\n return \"Failed to execute '\" + functionName + \"' on 'ResizeObserver': 1 argument required, but only 0 present.\";\n }\n if (!(target && target.nodeType === window.Node.ELEMENT_NODE)) {\n return \"Failed to execute '\" + functionName + \"' on 'ResizeObserver': parameter 1 is not of type 'Element'.\";\n }\n}\nfunction findTargetIndex(collection, target) {\n for (var index = 0; index < collection.length; index += 1) {\n if (collection[index].target === target) {\n return index;\n }\n }\n return -1;\n}\nvar gatherActiveObservationsAtDepth = function (depth) {\n resizeObservers.forEach(function (ro) {\n ro.$$activeTargets = [];\n ro.$$skippedTargets = [];\n ro.$$observationTargets.forEach(function (ot) {\n if (ot.isActive()) {\n var targetDepth = calculateDepthForNode(ot.target);\n if (targetDepth > depth) {\n ro.$$activeTargets.push(ot);\n }\n else {\n ro.$$skippedTargets.push(ot);\n }\n }\n });\n });\n};\nvar hasActiveObservations = function () {\n return resizeObservers.some(function (ro) { return !!ro.$$activeTargets.length; });\n};\nvar hasSkippedObservations = function () {\n return resizeObservers.some(function (ro) { return !!ro.$$skippedTargets.length; });\n};\nvar broadcastActiveObservations = function () {\n var shallowestTargetDepth = Infinity;\n resizeObservers.forEach(function (ro) {\n if (!ro.$$activeTargets.length) {\n return;\n }\n var entries = [];\n ro.$$activeTargets.forEach(function (obs) {\n var entry = new ResizeObserverEntry_1.ResizeObserverEntry(obs.target);\n entries.push(entry);\n obs.$$broadcastWidth = entry.contentRect.width;\n obs.$$broadcastHeight = entry.contentRect.height;\n var targetDepth = calculateDepthForNode(obs.target);\n if (targetDepth < shallowestTargetDepth) {\n shallowestTargetDepth = targetDepth;\n }\n });\n ro.$$callback(entries, ro);\n ro.$$activeTargets = [];\n });\n return shallowestTargetDepth;\n};\nvar deliverResizeLoopErrorNotification = function () {\n var errorEvent = new window.ErrorEvent('ResizeLoopError', {\n message: 'ResizeObserver loop completed with undelivered notifications.',\n });\n window.dispatchEvent(errorEvent);\n};\nvar calculateDepthForNode = function (target) {\n var depth = 0;\n while (target.parentNode) {\n target = target.parentNode;\n depth += 1;\n }\n return depth;\n};\nvar notificationIteration = function () {\n var depth = 0;\n gatherActiveObservationsAtDepth(depth);\n while (hasActiveObservations()) {\n depth = broadcastActiveObservations();\n gatherActiveObservationsAtDepth(depth);\n }\n if (hasSkippedObservations()) {\n deliverResizeLoopErrorNotification();\n }\n};\nvar animationFrameCancelToken;\nvar startLoop = function () {\n if (animationFrameCancelToken)\n return;\n runLoop();\n};\nvar runLoop = function () {\n animationFrameCancelToken = window.requestAnimationFrame(function () {\n notificationIteration();\n runLoop();\n });\n};\nvar checkStopLoop = function () {\n if (animationFrameCancelToken && !resizeObservers.some(function (ro) { return !!ro.$$observationTargets.length; })) {\n window.cancelAnimationFrame(animationFrameCancelToken);\n animationFrameCancelToken = undefined;\n }\n};\nvar install = function () {\n return window.ResizeObserver = ResizeObserver;\n};\nexports.install = install;\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUmVzaXplT2JzZXJ2ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvUmVzaXplT2JzZXJ2ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSx5REFBd0Q7QUFFeEQsNkRBQTREO0FBRTVELElBQU0sZUFBZSxHQUFHLEVBQXNCLENBQUM7QUFFL0M7SUFVSSx3QkFBWSxRQUFnQztRQVA1QyxnQkFBZ0I7UUFDVCx5QkFBb0IsR0FBRyxFQUF5QixDQUFDO1FBQ3hELGdCQUFnQjtRQUNULG9CQUFlLEdBQUcsRUFBeUIsQ0FBQztRQUNuRCxnQkFBZ0I7UUFDVCxxQkFBZ0IsR0FBRyxFQUF5QixDQUFDO1FBR2hELElBQU0sT0FBTyxHQUFHLGFBQWEsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUN4QyxJQUFJLE9BQU8sRUFBRTtZQUNULE1BQU0sU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1NBQzVCO1FBQ0QsSUFBSSxDQUFDLFVBQVUsR0FBRyxRQUFRLENBQUM7SUFDL0IsQ0FBQztJQUVNLGdDQUFPLEdBQWQsVUFBZSxNQUFlO1FBQzFCLElBQU0sT0FBTyxHQUFHLFdBQVcsQ0FBQyxTQUFTLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDL0MsSUFBSSxPQUFPLEVBQUU7WUFDVCxNQUFNLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQztTQUM1QjtRQUNELElBQU0sS0FBSyxHQUFHLGVBQWUsQ0FBQyxJQUFJLENBQUMsb0JBQW9CLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDakUsSUFBSSxLQUFLLElBQUksQ0FBQyxFQUFFO1lBQ1osT0FBTztTQUNWO1FBQ0QsSUFBSSxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxJQUFJLHFDQUFpQixDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7UUFDOUQsc0JBQXNCLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDakMsQ0FBQztJQUVNLGtDQUFTLEdBQWhCLFVBQWlCLE1BQWU7UUFDNUIsSUFBTSxPQUFPLEdBQUcs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","import type { BlockerFunction } from '@remix-run/router';\nimport * as Sentry from '@sentry/react';\nimport type { RouteProps } from 'react-router-dom';\nimport { createBrowserRouter as _createBrowserRouter } from 'react-router-dom';\n\nimport type { AllPremiumFeatures } from '@constants';\n\nexport {\n Link,\n MemoryRouter,\n Router,\n matchPath,\n useLocation,\n useParams,\n BrowserRouter,\n Route,\n Routes,\n useMatch,\n RouterProvider,\n useNavigate,\n useRoutes,\n Navigate,\n useBeforeUnload,\n unstable_useBlocker as useBlocker,\n useNavigationType,\n createRoutesFromChildren,\n matchRoutes,\n createMemoryRouter,\n Outlet,\n useSearchParams,\n redirect,\n} from 'react-router-dom';\n\nconst createBrowserRouter = Sentry.wrapCreateBrowserRouter(_createBrowserRouter) as typeof _createBrowserRouter;\n\nexport { createBrowserRouter };\nexport type { BlockerFunction };\n\nexport type { RouteProps } from 'react-router-dom';\n\nexport type RoutePropsWithPermission = Pick & {\n allowedPermissions: PermissionKey[];\n premiumFeature?: AllPremiumFeatures;\n fallbackPath?: RouteProps['path'];\n};\n","import type { TypedUseSelectorHook } from 'react-redux';\n// eslint-disable-next-line no-restricted-imports\nimport { shallowEqual, useDispatch as useReduxDispatch, useSelector as useReduxSelector } from 'react-redux';\n\nimport type { AppDispatch, RootState } from '@/store';\n\nexport const useDispatch: () => AppDispatch = useReduxDispatch;\n\n/**\n * @deprecated It's not recommended to use this hook directly. Use instead derived hooks in `app/hooks/redux` folder.\n */\nexport const useSelector: TypedUseSelectorHook = useReduxSelector;\n\n/**\n * @deprecated It's not recommended to use this hook directly. Use instead derived hooks in `app/hooks/redux` folder.\n */\nexport const useShallowEqualSelector = (selector: (state: RootState) => T) => useSelector(selector, shallowEqual);\n","import type { RootState } from '@/store';\n\nimport { useShallowEqualSelector } from '.';\n\ntype LocalState = RootState['auth'];\ntype LocalSelector = (state: LocalState) => T;\n\nexport function useAuth(): LocalState;\nexport function useAuth(selector: LocalSelector): T;\n\nexport function useAuth(selector?: LocalSelector) {\n return useShallowEqualSelector((state) =>\n selector ? selector(state.auth) : (state.auth as LocalState),\n );\n}\n","import type { RootState } from '@/store';\n\nimport { useShallowEqualSelector } from '.';\n\ntype LocalState = RootState['applicationState'];\ntype LocalSelector = (state: LocalState) => T;\n\nexport function useApplicationState(): LocalState;\nexport function useApplicationState(selector: LocalSelector): T;\n\nexport function useApplicationState(selector?: LocalSelector) {\n return useShallowEqualSelector((state) =>\n selector ? selector(state.applicationState) : (state.applicationState as LocalState),\n );\n}\n","import { useApplicationState } from '@/redux/hooks/applicationState';\nimport type { RootState } from '@/store';\n\ntype LocalState = RootState['applicationState']['data'];\ntype LocalSelector = (state: LocalState) => T;\n\nfunction useApplication(): LocalState;\nfunction useApplication(selector: LocalSelector): T;\n\nfunction useApplication(selector?: LocalSelector) {\n return useApplicationState((state) => (selector ? selector(state.data) : state.data));\n}\n\nexport default useApplication;\n","import { useEffect, useRef } from 'react';\n\nconst useLatestValue = (value: T) => {\n const ref = useRef(value);\n\n useEffect(() => {\n ref.current = value;\n }, [value]);\n\n return ref;\n};\n\nexport default useLatestValue;\n","import type { RootState } from '@/store';\n\nimport { useShallowEqualSelector } from '.';\n\ntype LocalState = RootState['organizations'];\ntype LocalSelector = (state: LocalState) => T;\n\nexport function useOrganizations(): LocalState;\nexport function useOrganizations(selector: LocalSelector): T;\n\nexport function useOrganizations(selector?: LocalSelector) {\n return useShallowEqualSelector((state) =>\n selector ? selector(state.organizations) : (state.organizations as LocalState),\n );\n}\n","import { useOrganizations } from '@/redux/hooks/organizations';\nimport type { RootState } from '@/store';\n\ntype LocalState = RootState['organizations']['current'];\ntype LocalSelector = (state: LocalState) => T;\n\nfunction useOrganization(): LocalState;\nfunction useOrganization(selector: LocalSelector): T;\n\nfunction useOrganization(selector?: LocalSelector) {\n return useOrganizations((state) => (selector ? selector(state.current) : state.current));\n}\n\nexport default useOrganization;\n","/**\n * @description\n * const QueryKeyPrefix = {\n * OrgInvitation: 'OrgInvitation',\n * } as const\n *\n * *Naming Rule*\n * {Product = ['Org', 'Chat', 'Calls', 'Desk', 'Live', 'BusinessMessaging', 'Application', 'User']}{Resource = As you wish}\n *\n * - Value is Same as key\n */\nconst QueryKeyPrefix = {\n // Shopify\n ShopifyVerifyAuth: 'ShopifyVerifyAuth',\n ShopifyFetchSignupInfo: 'ShopifyFetchSignupInfo',\n ShopifyFetchApplications: 'ShopifyFetchApplications',\n ShopifyFetchBots: 'ShopifyFetchBots',\n ShopifyFetchEmbeddings: 'ShopifyFetchEmbeddings',\n ShopifyFetchStatus: 'ShopifyFetchStatus',\n\n // Organization\n Organization: 'Organization',\n OrgInvitation: 'OrgInvitation',\n OrgAccessControlSecurity: 'OrgAccessControlSecurity',\n OrgConfirmEmailChange: 'OrgConfirmEmailChange',\n OrgFetchOrganizationInvitations: 'orgFetchOrganizationInvitations',\n OrgSubscriptionInfo: 'OrgSubscriptionInfo',\n OrgPermissions: 'OrgPermissions',\n OrgMemberRoles: 'OrgMemberRoles',\n OrgMemberRole: 'OrgMemberRole',\n OrgVoucherUsage: 'OrgVoucherUsage',\n OrgVoucherUsageByRange: 'OrgVoucherUsageByRange',\n OrgPhoneNumbers: 'OrgPhoneNumbers',\n OrgAvailablePhoneNumbers: 'OrgAvailablePhoneNumbers',\n OrgOmegaAttributes: 'OrgOmegaAttributes',\n\n // App\n Application: 'Application',\n ApplicationMonthlyUsageWithOrgUsages: 'ApplicationMonthlyUsageWithOrgUsages',\n AppFetchEnabledFeatures: 'AppFetchEnabledFeatures',\n AppUser: 'AppUser',\n AppUsers: 'AppUsers',\n\n // Core\n CoreApplicationAttributes: 'CoreApplicationAttributes',\n CoreWebhookSettings: 'CoreWebhookSettings',\n\n // Chat\n ChannelMessages: 'ChannelMessages',\n ChatMessage: 'ChatMessage',\n ChatApiTokens: 'ChatApiTokens',\n ChatDefaultChannelInvitationPreference: 'ChatDefaultChannelInvitationPreference',\n ChatChannelMetadata: 'ChatChannelMetadata',\n ChatChannelData: 'ChatChannelData',\n ChatGroupChannelMembers: 'ChatGroupChannelMembers',\n ChatAiBots: 'ChatAiBots',\n ChatAiBot: 'ChatAiBot',\n ChatAiBotConversationLogs: 'ChatAiBotConversationLogs',\n ChatAiBotAvailable: 'ChatAiBotAvailable',\n ChatOpenAiEmbeddings: 'ChatOpenAiEmbeddings',\n ChatAiFunctionCall: 'ChatAiFunctionCall',\n ChatAiFunctionCalls: 'ChatAiFunctionCalls',\n ChatAiWorkflows: 'ChatAiWorkflows',\n ChatAiEmbeddingStatus: 'ChatAiEmbeddingStatus',\n ChatAiAnalytics: 'ChatAiAnalytics',\n ChatAiAnalyticsPopularItems: 'ChatAiAnalyticsPopularItems',\n ChatAiPromptHistory: 'ChatAiPromptHistory',\n ChatAiKnowledgeIndex: 'ChatAiKnowledgeIndex',\n ChatAiForm: 'ChatAiForm',\n ChatAiFormData: 'ChatAiFormData',\n ChatAiFormDataExports: 'ChatAiFormDataExports',\n ChatAiCrawledSiteDetail: 'ChatAiCrawledSiteDetail',\n ChatOpenChannel: 'ChatOpenChannel',\n ChatOpenChannelParticipants: 'ChatOpenChannelParticipants',\n ChatExtensions: 'ChatExtensions',\n ChatUserMessageHistoryUsers: 'ChatUserMessageHistoryUsers',\n ChatPoll: 'ChatPoll',\n ChatPin: 'ChatPin',\n ChatMetrics: 'ChatMetrics',\n ChannelManager: 'ChannelManager',\n ChannelList: 'ChannelList',\n\n // Moderation\n ModerationRule: 'ModerationRule',\n ModerationRules: 'ModerationRules',\n ModerationRuleSchema: 'ModerationRuleSchema',\n ModerationReviewTasksSupervision: 'ModerationReviewTasksSupervision',\n ModerationLog: 'ModerationLog',\n ModerationLogQuery: 'ModerationLogQuery',\n ModerationLogChannel: 'ModerationLogChannel',\n ModerationLogModerator: 'ModerationLogModerator',\n ModerationLogSender: 'ModerationLogSender',\n ModerationLogUser: 'ModerationLogUser',\n ModerationFlaggedUsers: 'ModerationFlaggedUsers',\n ModerationFlaggedUserSearch: 'ModerationFlaggedUserSearch',\n ModerationReviewQueues: 'ModerationReviewQueues',\n ModerationReviewQueue: 'ModerationReviewQueue',\n ModerationReviewQueueModerators: 'ModerationReviewQueueModerators',\n ModerationReviewQueueModeratorsById: 'ModerationReviewQueueModeratorsById',\n ModerationReviewQueueConfig: 'ModerationReviewQueueConfig',\n ModerationReviewTask: 'ModerationReviewTask',\n ModerationReviewTasks: 'ModerationReviewTasks',\n ModerationReviewQueueSettings: 'ModerationReviewQueueSettings',\n ModerationPinLimitSettings: 'ModerationPinLimitSettings',\n ModerationAssignReviewTasks: 'ModerationAssignReviewTasks',\n ModerationHiveDescription: 'ModerationHiveDescription',\n ModerationHiveConfiguration: 'ModerationHiveConfiguration',\n ModerationEngineEnableStatus: 'ModerationEngineEnableStatus',\n ModerationProfanityKeyword: 'ModerationProfanityKeyword',\n ModerationProfanityDefaultKeywords: 'ModerationProfanityDefaultKeywords',\n ModerationPenaltyActions: 'ModerationPenaltyActions',\n ModerationSDKUser: 'ModerationSDKUser',\n ModerationProfanityCustomType: 'ModerationProfanityCustomType',\n ModerationProfanityCustomTypeDuplicated: 'ModerationProfanityCustomTypeDuplicated',\n ModerationModeratedUsers: 'ModerationModeratedUsers',\n ModerationReviewTickets: 'ModerationReviewTickets',\n ModerationReviewTicket: 'ModerationReviewTicket',\n ModerationModeratorAction: 'ModerationModeratorAction',\n ModerationMemberSeatCount: 'ModerationMemberSeatCount',\n ModerationModeratorMessageList: 'ModerationModeratorMessageList',\n ModerationModeratorGroup: 'ModerationModeratorGroup',\n ModerationChannelById: 'ModerationChannelById',\n ModerationAnalyticsRuleTriggerCount: 'ModerationAnalyticsRuleTriggerCount',\n ModerationAnalyticsActionCount: 'ModerationAnalyticsActionCount',\n ModerationEnabledRuleCount: 'ModerationEnabledRuleCount',\n ModerationReportCategory: 'ModerationReportCategory',\n ModerationReportCategoryVisible: 'ModerationReportCategoryVisible',\n ModerationReportCategoryUsage: 'ModerationReportCategoryUsage',\n ModerationKeywordDetection: 'ModerationKeywordDetection',\n\n //UIKit\n UIKitConfig: 'UIKitConfig',\n\n // Desk\n DeskWebhooks: 'DeskWebhooks',\n DeskFetchCustomer: 'DeskFetchCustomer',\n DeskFetchAgentTicketCounts: 'DeskFetchAgentTicketCounts',\n DeskFetchAssignedTickets: 'DeskFetchAssignedTickets',\n DeskFetchRecentTicketsByCustomer: 'DeskFetchRecentTicketsByCustomer',\n DeskFetchTicketsByCustomer: 'DeskFetchTicketsByCustomer',\n DeskAgent: 'DeskAgent',\n DeskFetchTwitterUser: 'DeskFetchTwitterUser',\n DeskFollowTwitterUser: 'DeskFollowTwitterUser',\n DeskUnfollowTwitterUser: 'DeskUnfollowTwitterUser',\n DeskGetHTMLKey: 'DeskGetHTMLKey',\n DeskFetchIFrameApps: 'DeskFetchIFrameApps',\n DeskTicketTags: 'DeskTicketTags',\n DeskAIContexts: 'DeskAIContexts',\n DeskAIFeatureBotLinkedToResponseAssistant: 'DeskAIFeatureBotLinkedToResponseAssistant',\n DeskAIChatbotListProxy: 'DeskAIChatbotListProxy',\n DeskAIChatbotProxy: 'DeskAIChatbotProxy',\n DeskAIFeatureSummarize: 'DeskAIFeatureSummarize',\n\n // Calls\n CallsSettings: 'CallsSettings',\n CallsDirectCallsInitialStatus: 'CallsDirectCallsInitialStatus',\n CallsDirectCall: 'CallsDirectCall',\n CallsDirectCalls: 'CallsDirectCalls',\n CallsDirectCallsReports: 'CallsDirectCallsReports',\n CallsStat: 'CallsStat',\n CallsRooms: 'CallsRooms',\n CallsUsage: 'CallsUsage',\n CallsVoucherUsageByApp: 'CallsVoucherUsageByApp',\n CallsVoucherUsageByOrg: 'CallsVoucherUsageByOrg',\n CallsVoucherUsageByType: 'CallsVoucherUsageByType',\n CallsVoucherUsageAllApps: 'CallsVoucherUsageAllApps',\n\n // Live\n LiveLiveEvents: 'LiveLiveEvents',\n LiveLiveEvent: 'LiveLiveEvent',\n LiveOpenChannel: 'LiveOpenChannel',\n LiveCustomItems: 'LiveCustomItems',\n LiveCreditUsage: 'LiveCreditUsage',\n LiveUsage: 'LiveUsage',\n LiveSettings: 'LiveSettings',\n\n // Business Messaging\n NotificationsTemplates: 'NotificationsTemplates',\n NotificationsTemplate: 'NotificationsTemplate',\n NotificationsChannels: 'NotificationsChannels',\n NotificationsChannel: 'NotificationsChannel',\n NotificationsNotifications: 'NotificationsNotifications',\n NotificationsNotificationTargets: 'NotificationsNotificationTargets',\n NotificationsPreviewMessages: 'NotificationsPreviewMessages',\n NotificationsMessages: 'NotificationsMessages',\n NotificationsSettings: 'NotificationsSettings',\n NotificationsAppAttributes: 'NotificationsAppAttributes',\n NotificationsWebhook: 'NotificationsWebhook',\n NotificationsSampleAppQRCode: 'NotificationsSampleAppQRCode',\n NotificationsChatExtension: 'NotificationsChatExtension',\n NotificationsTags: 'NotificationsTags',\n NotificationsMetrics: 'NotificationsMetrics',\n NotificationsTimeSeriesMetrics: 'NotificationsTimeSeriesMetrics',\n NotificationsTagCount: 'NotificationsTagCount',\n NotificationsUsage: 'NotificationsUsage',\n NotificationsTemplateCount: 'NotificationsTemplateCount',\n\n // Common\n DashboardAppRecentVersion: 'DashboardAppRecentVersion',\n UseInvoice: 'UseInvoice',\n\n // Settings\n // -- Push notification\n PushNotificationConfiguration: 'PushNotificationConfiguration',\n UseChannelMessage: 'UseChannelMessage',\n\n // Omega\n OmegaSMSChannels: 'OmegaSMSChannels',\n OmegaChannelBindings: 'OmegaChannelBindings',\n OmegaKakaoSenderCategories: 'OmegaKakaoSenderCategories',\n OmegaKakaoTemplateCategories: 'OmegaKakaoTemplateCategories',\n} as const;\n\nexport default QueryKeyPrefix;\n","import camelCase from 'lodash/camelCase';\nimport isPlainObject from 'lodash/isPlainObject';\nimport mapKeys from 'lodash/mapKeys';\nimport mapValues from 'lodash/mapValues';\nimport snakeCase from 'lodash/snakeCase';\n\n// Reference: https://stackoverflow.com/a/35056190\nconst deeply = (map) => (obj, fn) =>\n map(\n mapValues(obj, (v) => (isPlainObject(v) ? deeply(map)(v, fn) : v)),\n fn,\n );\n\ntype CamelToSnakeCase = S extends `${infer T}${infer U}`\n ? `${T extends Capitalize ? '_' : ''}${Lowercase}${CamelToSnakeCase}`\n : S;\n\ntype CamelToSnakeCaseNested = T extends object\n ? {\n [K in keyof T as CamelToSnakeCase]: CamelToSnakeCaseNested;\n }\n : T;\n\n/**\n * Convert all object keys including nested ones from camelCase to snake_keys.\n *\n * Note that type inferences can be wrong when keys include acronyms or all-caps words like ID, HTML. In that case you\n * need to specify `OutputType` manually.\n */\nexport function snakeCaseKeys>(\n object: InputType,\n): OutputType {\n return deeply(mapKeys)(object, (_, key) => snakeCase(key));\n}\n\nexport type SnakeToCamelCase = S extends `${infer T}_${infer U}`\n ? `${Lowercase}${Capitalize>}`\n : S;\n\ntype SnakeToCamelCaseNested = T extends object\n ? {\n [K in keyof T as SnakeToCamelCase]: SnakeToCamelCaseNested;\n }\n : T;\n\nexport function camelCaseKeys>(\n object: InputType,\n): OutputType {\n return deeply(mapKeys)(object, (_, key) => camelCase(key));\n}\n","import type { AxiosError, AxiosInstance } from 'axios';\nimport axios from 'axios';\nimport qs from 'qs';\n\nimport { getCurrentPathWithQueryString } from '@utils';\nimport logException from '@utils/logException';\n\nconst truncate = (text: string) =>\n text.replace(/\\b[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}\\b/g, '{UUID}').slice(0, 200);\n\n/**\n *\n * null or undefined → undefined\n * '/users/d3aa88e2-c754-41e0-8ba6-4198a34aa0a2' → '/users/{UUID}'\n * { team: 'frontend', name: 'Roy' } → 'team=frontend&name=Roy'\n */\nfunction format(input: any) {\n if (!input) return;\n if (typeof input === 'string') return truncate(input);\n if (typeof input === 'object') return truncate(qs.stringify(input));\n return;\n}\n\nfunction logAxiosException(error: unknown) {\n if (!axios.isAxiosError(error)) throw error;\n const { config, response } = error as AxiosError<{ message: string | object }>;\n\n logException(error, {\n reason: 'Axios',\n tags: {\n method: config.method?.toUpperCase(),\n url: format(config.url),\n params: format(config.params),\n message: format((response?.data as any)?.message),\n status: response?.status,\n },\n context: {\n request: {\n url: config.url,\n method: config.method,\n params: config.params,\n data: config.data,\n },\n response: {\n status: response?.status,\n data: response?.data,\n },\n },\n });\n}\n\nexport function axiosResponseRejectedInterceptor(error: any) {\n if (axios.isCancel(error)) {\n // Ignore a rejection by a request cancellation\n // axios support validator function for error object whether isCancel or not\n // axios.isCancel(error);\n return null;\n }\n\n if (!error) {\n logException(new Error('Caught undefined error in app/api/cancellableAxios'), {\n reason: 'Axios - undefined error',\n context: { error, isErrorNullOrUndefined: error == null },\n });\n return Promise.reject(error);\n }\n\n if (error.status === 401) {\n logException(error, { reason: 'Axios - error.status is 401' });\n location.href = '/auth/signout';\n } else if (error.response?.status === 401) {\n // The request was made, but the server responded with a status code\n // that falls out of the range of 2xx\n location.href = `/auth/signout?next=${getCurrentPathWithQueryString()}`;\n } else if (error.response?.status >= 500) {\n logAxiosException(error);\n }\n\n // can be either Error or AxiosError object\n return Promise.reject(error);\n}\n\nexport default function setupAxiosInterceptors(axiosInstance: AxiosInstance) {\n axiosInstance.interceptors.response.use((response) => {\n // Do something with response data\n return response;\n }, axiosResponseRejectedInterceptor);\n}\n","import type { AxiosPromise, AxiosRequestConfig, Canceler } from 'axios';\nimport axios from 'axios';\nimport qs from 'qs';\n\nimport setupAxiosInterceptors from './setupAxiosInterceptors';\n\naxios.defaults.paramsSerializer = (params) => qs.stringify(params, { arrayFormat: 'repeat' });\nsetupAxiosInterceptors(axios);\n\nexport enum HttpMethod {\n Get,\n Delete,\n Head,\n Post,\n Put,\n Patch,\n}\n\nexport type CancellableAxiosPromise = AxiosPromise & {\n cancel: Canceler;\n};\n\nexport class CancellableAxios {\n private createCancelTokenSource = () => axios.CancelToken.source();\n\n protected makeRequest = ({\n method,\n url,\n data,\n config: originalConfig,\n }: {\n method: HttpMethod;\n url: string;\n data?: any;\n config: AxiosRequestConfig;\n }): CancellableAxiosPromise => {\n const cancelTokenSource = this.createCancelTokenSource();\n const config = {\n ...axios.defaults,\n withCredentials: true,\n ...originalConfig,\n cancelToken: cancelTokenSource.token,\n } as AxiosRequestConfig;\n\n const request: CancellableAxiosPromise = (() => {\n let axiosPromise: AxiosPromise & { cancel?: Canceler };\n switch (method) {\n case HttpMethod.Get:\n axiosPromise = axios.get(url, config);\n break;\n case HttpMethod.Delete:\n axiosPromise = axios.delete(url, config);\n break;\n case HttpMethod.Head:\n axiosPromise = axios.head(url, config);\n break;\n case HttpMethod.Post:\n axiosPromise = axios.post(url, data, config);\n break;\n case HttpMethod.Put:\n axiosPromise = axios.put(url, data, config);\n break;\n default:\n // HttpMethod.Patch:\n axiosPromise = axios.patch(url, data, config);\n }\n axiosPromise.cancel = cancelTokenSource.cancel;\n\n return axiosPromise as CancellableAxiosPromise;\n })();\n\n return request;\n };\n\n public get original() {\n return axios;\n }\n\n /**\n * Don't forget to add trailing slash('/') our API server will expect\n * trailing slash(especially DRF related servers), Chrome automatically fix this but\n * Safari doesn't so please always add slash after URL.\n */\n public get = (url: string, config: AxiosRequestConfig = {}) =>\n this.makeRequest({ method: HttpMethod.Get, url, config });\n\n /**\n * Don't forget to add trailing slash('/') our API server will expect\n * trailing slash(especially DRF related servers), Chrome automatically fix this but\n * Safari doesn't so please always add slash after URL.\n */\n public delete = (url: string, config: AxiosRequestConfig = {}) =>\n this.makeRequest({ method: HttpMethod.Delete, url, config });\n\n /**\n * Don't forget to add trailing slash('/') our API server will expect\n * trailing slash(especially DRF related servers), Chrome automatically fix this but\n * Safari doesn't so please always add slash after URL.\n */\n public head = (url: string, config: AxiosRequestConfig = {}) =>\n this.makeRequest({ method: HttpMethod.Head, url, config });\n\n /**\n * Don't forget to add trailing slash('/') our API server will expect\n * trailing slash(especially DRF related servers), Chrome automatically fix this but\n * Safari doesn't so please always add slash after URL.\n */\n public post = (url: string, data?: any, config: AxiosRequestConfig = {}) =>\n this.makeRequest({ method: HttpMethod.Post, url, data, config });\n\n /**\n * Don't forget to add trailing slash('/') our API server will expect\n * trailing slash(especially DRF related servers), Chrome automatically fix this but\n * Safari doesn't so please always add slash after URL.\n */\n public put = (url: string, data?: any, config: AxiosRequestConfig = {}) =>\n this.makeRequest({ method: HttpMethod.Put, url, data, config });\n\n /**\n * Don't forget to add trailing slash('/') our API server will expect\n * trailing slash(especially DRF related servers), Chrome automatically fix this but\n * Safari doesn't so please always add slash after URL.\n */\n public patch = (url: string, data?: any, config: AxiosRequestConfig = {}) =>\n this.makeRequest({ method: HttpMethod.Patch, url, data, config });\n}\n\nexport const cancellableAxios = new CancellableAxios();\n","import qs from 'qs';\n\nimport config from '@/config';\nimport { isStaging } from '@utils';\nimport { snakeCaseKeys } from '@utils/ObjectKeyConverter';\n\nimport { cancellableAxios } from './cancellableAxios';\n\nlet gateRegionSubdomain: string = '';\n\nexport const setGateRegionSubdomain = (region: string) => {\n gateRegionSubdomain = region;\n};\n\nexport const getDeskIframeURL: GetDeskIframeURL = ({ id, region, params }) => {\n const path = `/api/apps_iframes/${id}/get_html?${qs.stringify(snakeCaseKeys(params))}`;\n if (isStaging()) {\n return `https://staging.desk-staging.sendbirdusercontent.com${path}`;\n }\n\n switch (config.BUILD_MODE) {\n case 'production':\n return `https://${region}.desk.sendbirdusercontent.com${path}`;\n default:\n return 'http://localhost:8000';\n }\n};\n\nexport const getDeskURL = (region: string) => {\n if (isStaging()) {\n if (['staging', 'preprod'].includes(region)) {\n return 'https://desk-api-staging.sendbird.com';\n }\n return 'https://desk.dev.sendbirdtest.com';\n }\n\n switch (config.BUILD_MODE) {\n case 'production':\n return `https://desk-api-${region}.sendbird.com`;\n default:\n return 'http://localhost:8000';\n }\n};\n\nexport const getDashboardURL = () => {\n return `${window.location.protocol}//${window.location.host}`;\n};\n\nexport const getDashboardAPIUrl = () => config.DASHBOARD_API_HOST;\n\n/**\n * Returns Gate `protocol://hostname:port` based on import.meta.env.BUILD_MODE\n *\n * Gate endpoint URLs **end with a trailing slash** except when they are prepended with `/platform/v3` or `/dashboard_api/v2oip`\n * so that they are consistent with https://sendbird.com/docs\n *\n * e.g.\n *\n * ```\n * ${getGateURL()}/dashboard_api/billing/vouchers/start_free_trial/ (O)\n * ${getGateURL()}/dashboard_api/billing/vouchers/start_free_trial (X)\n * ```\n *\n * Exception:\n * ```\n * ${getGateURL()}/platform/v3/users/my_user_id (O)\n * ${getGateURL()}/platform/v3/users/my_user_id/ (X)\n *\n * ${getGateURL()}/dashboard_api/v2oip/direct_calls (O)\n * ${getGateURL()}/dashboard_api/v2oip/direct_calls/ (X)\n * ```\n */\nexport const getGateURL = () => config.GATE_URL;\nexport const getGateURLWithRegion = () => {\n let subdomain = gateRegionSubdomain;\n\n if (gateRegionSubdomain === 'staging') {\n subdomain = 'preprod';\n } else if (gateRegionSubdomain === 'ap-1') {\n subdomain = subdomain.replace('-', '');\n } else if (!['ap-1', 'paypay'].includes(gateRegionSubdomain)) {\n subdomain = '';\n }\n return config.GATE_URL_REGION.replace(/\\{region\\}\\.?/, subdomain ? `${subdomain}.` : '');\n};\n\nexport const axios = cancellableAxios;\n","import { axios, getGateURL } from '@api/shared';\n\nexport const createApplication: CreateApplicationAPI = (payload: {}) => {\n return axios.post(`${getGateURL()}/dashboard/applications/`, payload);\n};\n\nexport const fetchAPITokens = ({ appId, role }: { appId: string; role?: ChatAPITokenRoles }) => {\n return axios.get<{ api_tokens: ChatAPIToken[] }>(`${getGateURL()}/platform/v3/applications/api_tokens`, {\n params: { role },\n headers: {\n 'App-Id': appId,\n },\n });\n};\n\nexport const createAPIToken = ({\n appId,\n password,\n role,\n label,\n}: {\n appId: string;\n password?: string;\n role?: ChatAPITokenRoles;\n label?: string;\n}) => {\n return axios.post(`${getGateURL()}/dashboard_api/applications/${appId}/secondary_api_token`, {\n password,\n role,\n label,\n });\n};\n\nexport const revokeAPITokens = ({ appId, apiToken }) => {\n return axios.delete(`${getGateURL()}/platform/v3/applications/api_tokens/${apiToken}`, {\n headers: {\n 'App-Id': appId,\n },\n });\n};\nexport const getApplicationSummary = ({ app_id }: { app_id: string }) =>\n axios.get<{\n id: number;\n app_id: string;\n region: string;\n is_moderator_info_in_admin_message: boolean;\n is_calls_enabled: boolean;\n }>(`${getGateURL()}/dashboard/application/${app_id}/`, {\n headers: { 'App-Id': app_id },\n });\n\nexport const getApplication: GetApplicationAPI = ({ app_id }) =>\n axios.get(`${getGateURL()}/dashboard/applications/${app_id}/get_detail/`, {});\n\nexport const fetchEnabledFeatures: FetchEnabledFeaturesAPI = (app_id) => {\n return axios.get(`${getGateURL()}/dashboard_api/applications/${app_id}/enabled_features/`, {});\n};\n\nexport const updateEnabledFeatures: UpdateEnabledFeaturesAPI = ({ app_id, payload }) => {\n return axios.put(`${getGateURL()}/dashboard_api/applications/${app_id}/enabled_features/`, payload, {});\n};\n\n/**\n * This API is used to display the status of the pipeline execution on Application Settings > Features.\n */\nexport const getMessageSearchPipeline: GetMessageSearchPipelineAPI = (app_id) => {\n return axios.get(`${getGateURL()}/message_search_api/migration_pipeline/`, {\n headers: { 'App-Id': app_id },\n });\n};\n","import axiosModule from 'axios';\n\nimport setupAxiosInterceptors from '@api/setupAxiosInterceptors';\nimport { axios, getGateURL } from '@api/shared';\nimport { LIST_LIMIT } from '@constants';\nimport { UserSearchQueryOptions } from '@constants/core';\nimport { fixedEncodeURIComponent } from '@utils/generals';\n\ntype FetchUsersResponse = { users: SDKUser[]; next: string };\n\nconst gateAxios = axiosModule.create({ baseURL: getGateURL(), withCredentials: true });\nsetupAxiosInterceptors(gateAxios);\n\nconst getQueryOptions = ({ query, option }: { query: string; option: string }) => {\n const encodedQuery = fixedEncodeURIComponent(query.trim());\n\n if (option === UserSearchQueryOptions.QUERY_USER_ID) {\n return { user_ids: encodedQuery };\n }\n if (option === UserSearchQueryOptions.QUERY_USER_NICKNAME) {\n return { nickname: encodedQuery };\n }\n if (option === UserSearchQueryOptions.QUERY_USER_NICKNAME_STARTSWITH) {\n return { nickname_startswith: encodedQuery };\n }\n return '';\n};\n\n/** Users */\nexport const fetchUsers = ({\n appId,\n token = '',\n limit,\n metadata,\n ...params\n}: CoreAPIPayload<{\n token?: string;\n limit?: number;\n active_mode?: UserActiveMode;\n shot_bot?: boolean;\n user_ids?: string;\n nickname?: string;\n nickname_startswith?: string;\n metadata?: {\n metadatakey: string;\n metadatavalues_in: string;\n };\n}>) =>\n gateAxios.get(`${getGateURL()}/platform/v3/users`, {\n params: {\n token,\n limit: limit ?? LIST_LIMIT,\n ...metadata,\n ...params,\n },\n headers: { 'App-Id': appId },\n });\n\nexport const searchUsers: SearchUsersAPI = ({\n appId,\n query,\n option,\n limit = LIST_LIMIT,\n next = '',\n active_mode = 'activated',\n metadata,\n endpoint = `${getGateURL()}/platform/v3/users`,\n}) => {\n return axios.get(endpoint, {\n params: {\n token: next,\n limit,\n active_mode,\n ...getQueryOptions({ query, option }),\n ...metadata,\n },\n headers: {\n 'App-Id': appId,\n },\n });\n};\n\nexport const createUser: CreateUserAPI = ({ appId, userId, nickname, profileUrl, profileFile, issueAccessToken }) => {\n const formData = new FormData();\n formData.set('user_id', userId);\n formData.set('nickname', nickname);\n\n // profile_url is a required parameter even if it's empty\n formData.set('profile_url', profileUrl || '');\n\n // optionally can upload a profile image\n if (profileFile) {\n formData.set('profile_file', profileFile);\n }\n\n if (issueAccessToken) {\n formData.set('issue_access_token', 'true');\n }\n return axios.post(`${getGateURL()}/platform/v3/users`, formData, {\n headers: {\n 'App-Id': appId,\n },\n });\n};\n\nexport const deleteUser = ({ appId, userId }: { appId: string; userId: string }) => {\n return gateAxios.delete<{}>(`${getGateURL()}/platform/v3/users/${encodeURIComponent(userId)}`, {\n headers: { 'App-Id': appId },\n });\n};\n\nexport const reactivateUser: ReactivateUserAPI = ({ appId, userId }) => {\n return axios.put(\n `${getGateURL()}/platform/dapi/users/${encodeURIComponent(userId)}/moderations`,\n {\n is_active: true,\n },\n {\n headers: {\n 'App-Id': appId,\n },\n },\n );\n};\n\nexport const deactivateUser: DeactivateUserAPI = ({ appId, userId, leaveAll }) => {\n return axios.put(\n `${getGateURL()}/platform/dapi/users/${encodeURIComponent(userId)}/moderations`,\n {\n is_active: false,\n leave_all_when_deactivated: leaveAll,\n },\n {\n headers: {\n 'App-Id': appId,\n },\n },\n );\n};\n\n/** retrieves user details */\nexport const fetchUser = ({\n appId,\n userId,\n with_access_token = false,\n include_phone_number = false,\n}: {\n appId: string;\n userId: User['userId'];\n with_access_token?: boolean;\n include_phone_number?: boolean;\n}) => {\n return gateAxios.get(`/platform/v3/users/${encodeURIComponent(userId)}`, {\n headers: { 'App-Id': appId },\n params: { with_access_token, ...(include_phone_number && { include_phone_number: true }) },\n });\n};\n\nexport const editUser: EditUserAPI = ({ appId, userId, ...updates }) => {\n const payload = new FormData();\n if (updates.nickname) {\n payload.set('nickname', updates.nickname);\n }\n\n // using != null here to clear a profile image by passing an empty string\n if (updates.profileUrl != null) {\n payload.set('profile_url', updates.profileUrl);\n }\n\n // can optionally upload an image file to update profile image\n if (updates.profileFile) {\n payload.set('profile_file', updates.profileFile);\n }\n\n if (updates.issueAccessToken) {\n payload.set('issue_access_token', 'true');\n }\n\n return axios.put(`${getGateURL()}/platform/v3/users/${encodeURIComponent(userId)}`, payload, {\n headers: {\n 'App-Id': appId,\n },\n });\n};\n\nexport const fetchUserPushTokens: FetchUserPushTokensAPI = ({ appId, userId, tokenType }) => {\n return axios.get(`${getGateURL()}/platform/v3/users/${encodeURIComponent(userId)}/push/${tokenType}`, {\n headers: {\n 'App-Id': appId,\n },\n });\n};\n\nexport const deleteUserPushToken: DeleteUserPushTokenAPI = ({ appId, userId, tokenType, token }) => {\n return axios.delete(\n `${getGateURL()}/platform/v3/users/${encodeURIComponent(userId)}/push/${tokenType}/${encodeURIComponent(token)}`,\n { headers: { 'App-Id': appId } },\n );\n};\n\n/** Register an operator */\nexport const fetchRegisteredOperator: FetchRegisteredOperatorAPI = ({ appId, organizationUid, userId }) => {\n return axios.get(\n `${getGateURL()}/dashboard/organization/${organizationUid}/member_by_sdk_user/?sdk_user_id=${encodeURIComponent(\n userId,\n )}`,\n {\n headers: {\n 'App-Id': appId,\n },\n },\n );\n};\n\nexport const searchOrganizationMembers: SearchOrganizationMembersAPI = ({\n appId,\n organizationUid,\n userId = '',\n email = '',\n}) => {\n return axios.get(\n `${getGateURL()}/dashboard/organization/${organizationUid}/members/search/?email=${encodeURIComponent(\n email,\n )}&sdk_user_id=${encodeURIComponent(userId)}`,\n {\n headers: {\n 'App-Id': appId,\n },\n },\n );\n};\n\nexport const registerUserAsOperator: RegisterUserAsOperatorAPI = ({ appId, organizationUid, userId, email }) => {\n return axios.put(\n `${getGateURL()}/dashboard/organization/${organizationUid}/members/link_sdk_user/`,\n { email, sdk_user_id: userId },\n {\n headers: {\n 'App-Id': appId,\n },\n },\n );\n};\n\nexport const unregisterUserAsOperator: UnregisterUserAsOperatorAPI = ({ appId, organizationUid, userId, email }) => {\n return axios.delete(`${getGateURL()}/dashboard/organization/${organizationUid}/members/link_sdk_user/`, {\n data: { sdk_user_id: userId, email },\n headers: {\n 'App-Id': appId,\n },\n });\n};\n\nexport const fetchUserGroupChannelCount: FetchUserGroupChannelCountAPI = ({ appId, userId, super_mode }) => {\n return axios.get(`${getGateURL()}/platform/v3/users/${encodeURIComponent(userId)}/group_channel_count`, {\n params: {\n state: 'joined',\n super_mode,\n },\n headers: {\n 'App-Id': appId,\n },\n });\n};\n\nexport const fetchUserMetadata: FetchUserMetadata = ({ userId, appId }) => {\n return axios.get(`${getGateURL()}/platform/v3/users/${userId}/metadata`, {\n headers: {\n 'App-Id': `${appId}`,\n },\n });\n};\n\nexport const deleteUserMetadata: DeleteUserMetadata = ({ userId, appId }) => {\n return axios.delete(`${getGateURL()}/platform/v3/users/${userId}/metadata`, {\n headers: {\n 'App-Id': `${appId}`,\n },\n });\n};\n\nexport const postUserMetadata: PostUserMetadata = ({ userId, appId, metadata }) => {\n return axios.post(\n `${getGateURL()}/platform/v3/users/${userId}/metadata`,\n { metadata },\n {\n headers: {\n 'App-Id': `${appId}`,\n },\n },\n );\n};\n\nexport const fetchFlaggedUsers: FetchFlaggedUsers = ({ appId, next = '', limit = LIST_LIMIT }) => {\n return axios.get(`${getGateURL()}/platform/v3/applications/settings_global/blacklist`, {\n params: {\n token: next,\n limit,\n },\n headers: {\n 'App-Id': `${appId}`,\n },\n });\n};\n\nexport const postFlaggedUsers: PostFlaggedUsers = ({ appId, userIds }) => {\n return axios.post(\n `${getGateURL()}/platform/v3/applications/settings_global/blacklist`,\n {\n blacklist_user_ids: userIds,\n },\n {\n headers: {\n 'App-Id': `${appId}`,\n },\n },\n );\n};\n\nexport const deleteFlaggedUsers: DeleteFlaggedUsers = ({ appId, userIds }) => {\n return axios.delete(`${getGateURL()}/platform/v3/applications/settings_global/blacklist`, {\n params: {\n user_ids: userIds,\n },\n headers: {\n 'App-Id': `${appId}`,\n },\n });\n};\n","import type { QueryFunction } from '@tanstack/react-query';\n\nimport type QueryKeyPrefix from '@constants/queryKey';\nimport { fetchAPITokens, fetchEnabledFeatures } from '@core/api/application';\nimport { fetchUser } from '@core/api/users';\n\nexport const fetchAPITokensQueryFn: QueryFunction<\n ChatAPIToken[],\n [(typeof QueryKeyPrefix)['ChatApiTokens'], Parameters[0]]\n> = async ({ queryKey: [, { appId, role }] }) => {\n const { data } = await fetchAPITokens({ appId, role });\n return data.api_tokens;\n};\n\nexport const fetchEnabledFeaturesQueryFn: QueryFunction<\n EnabledFeatures,\n [(typeof QueryKeyPrefix)['AppFetchEnabledFeatures'], string]\n> = async ({ queryKey: [, appId] }) => {\n const { data } = await fetchEnabledFeatures(appId);\n return data;\n};\n\nexport const fetchUserQueryFn: QueryFunction<\n SDKUser,\n [(typeof QueryKeyPrefix)['AppUser'], Parameters[0]]\n> = async ({ queryKey: [, { appId, userId, with_access_token, include_phone_number }] }) => {\n const { data } = await fetchUser({ appId, userId, with_access_token, include_phone_number });\n return data;\n};\n","import { useAuth } from '../redux/hooks/auth';\n\nconst useIsAuthenticated = () => useAuth((state) => state.authenticated);\n\nexport default useIsAuthenticated;\n","import { ChatFeatureName } from '@constants';\n\nconst convertEnabledFeaturesObjectToFeatureKeys = (enabledFeatures: EnabledFeatures) =>\n Object.entries(enabledFeatures)\n .filter(([key, value]) => {\n if (key === ChatFeatureName.MessageSearch) {\n return false;\n }\n return !!value;\n })\n .map(([key]) => key);\n\nexport default convertEnabledFeaturesObjectToFeatureKeys;\n","import { useMemo } from 'react';\n\nimport { useQuery } from '@tanstack/react-query';\nimport isEmpty from 'lodash/isEmpty';\n\nimport QueryKeyPrefix from '@constants/queryKey';\nimport { fetchEnabledFeaturesQueryFn } from '@core/api/queryFn';\nimport useApplication from '@hooks/useApplication';\nimport useIsAuthenticated from '@hooks/useIsAuthenticated';\nimport useOrganization from '@hooks/useOrganization';\n\nimport convertEnabledFeaturesObjectToFeatureKeys from './convertEnabledFeaturesObjectToFeatureKeys';\n\n/**\n * @FIXME: https://sendbird.atlassian.net/browse/DFE-1504\n * @description Multiple enabledFeatures in different places\n */\nconst useSelfServiceFeatures = () => {\n const { isSelfService, isOrgActive } = useOrganization((current) => ({\n isSelfService: !!current.is_self_serve,\n isOrgActive: !isEmpty(current) && current.status === 'ACTIVE',\n }));\n const authenticated = useIsAuthenticated();\n const application = useApplication();\n\n const appId = application?.app_id;\n\n const { isLoading: isLoadingFeatures, data: selfServiceFeatures = [] } = useQuery(\n {\n queryKey: [QueryKeyPrefix.AppFetchEnabledFeatures, appId],\n queryFn: fetchEnabledFeaturesQueryFn,\n enabled: !!(authenticated && isOrgActive && isSelfService && appId),\n select: (data) => convertEnabledFeaturesObjectToFeatureKeys(data),\n },\n );\n\n const isLoading = !authenticated || !application || isLoadingFeatures;\n\n return useMemo(() => ({ isLoading, result: selfServiceFeatures }), [isLoading, selfServiceFeatures]);\n};\n\nexport default useSelfServiceFeatures;\n","import { createContext, useCallback, useEffect, useMemo, useState } from 'react';\n\nimport { useAuth } from '@/redux/hooks/auth';\nimport type { AuthenticationState } from '@common/redux/reducers/authentication';\nimport type { AllPremiumFeatures } from '@constants';\nimport { DeskSettingsPage, LegacyPremiumFeatureMap, Page } from '@constants';\nimport useApplication from '@hooks/useApplication';\nimport useLatestValue from '@hooks/useLatestValue';\nimport useOrganization from '@hooks/useOrganization';\n\nimport useSelfServiceFeatures from './useSelfServiceFeatures';\n\ntype IsPermittedCombinedWithOption = 'and' | 'or';\n\n/**\n * Returns a function checking if the user has given permissions\n * @param userPermissions user role's permission list\n * @knipignore\n */\nexport const isPermittedFactory =\n (userPermissions: PermissionKey[]) =>\n (\n allowedPermissions: readonly PermissionKey[],\n options: { combinedWith: IsPermittedCombinedWithOption } = { combinedWith: 'or' },\n ) => {\n switch (options.combinedWith) {\n case 'or':\n return userPermissions.some((permission) => allowedPermissions.includes(permission));\n case 'and':\n return allowedPermissions.every((permission) => userPermissions.includes(permission));\n default:\n throw new Error('combinedWith option must be either \"and\" or \"or\".');\n }\n };\n\n/** @knipignore */\nexport const isAccessiblePageFactory = (userPermissions: PermissionKey[]) => (page: Page | DeskSettingsPage) => {\n switch (page) {\n // application\n case Page.application:\n return userPermissions.some(\n (v) =>\n v.startsWith('application.') ||\n v.startsWith('chat.') ||\n v.startsWith('moderation.openChannel.') ||\n v.startsWith('moderation.groupChannel.') ||\n v.startsWith('moderation.supergroupChannel.'),\n );\n // overview\n case Page.overview:\n return userPermissions.some((v) => v.startsWith('application.overview.'));\n\n // users\n case Page.users:\n return userPermissions.some((v) => v.startsWith('application.users.'));\n\n // notification\n case Page.notifications:\n return userPermissions.some((v) => v.startsWith('notifications.'));\n\n // chat\n case Page.dataExports:\n return userPermissions.some((v) => v.startsWith('chat.dataExport.'));\n case Page.aiBots:\n // FIXME(DFE-1152): remove chat.bots.ai after migrate all permissions\n return userPermissions.some((v) => v.startsWith('chat.bots.ai.') || v.startsWith('aiChatbot.'));\n case Page.uiKit:\n return userPermissions.some((v) => v.startsWith('chat.uikit.configuration.'));\n\n // moderation\n case Page.allChannels:\n return userPermissions.some(\n (v) =>\n v.startsWith('moderation.openChannel.') ||\n v.startsWith('moderation.groupChannel.') ||\n v.startsWith('moderation.supergroupChannel.'),\n );\n case Page.openChannels:\n return userPermissions.some((v) => v.startsWith('moderation.openChannel.'));\n case Page.groupChannels:\n return userPermissions.some((v) => v.startsWith('moderation.groupChannel.'));\n case Page.supergroupChannels:\n return userPermissions.some((v) => v.startsWith('moderation.supergroupChannel.'));\n case Page.advancedModeration:\n return (\n userPermissions.some((v) => v.startsWith('moderation.logs.')) ||\n userPermissions.some((v) => v.startsWith('moderation.rules.')) ||\n userPermissions.some((v) => v.startsWith('moderation.flaggedUsers.')) ||\n userPermissions.some((v) => v.startsWith('moderation.moderatedUsers.')) ||\n userPermissions.some((v) => v.startsWith('moderation.moderatorMessage.'))\n );\n case Page.moderationLogs:\n return userPermissions.some((v) => v.startsWith('moderation.logs.'));\n case Page.moderationRules:\n return userPermissions.some((v) => v.startsWith('moderation.rules.'));\n case Page.moderationAllTicket:\n return userPermissions.some((v) => v.startsWith('moderation.allTickets.'));\n case Page.moderationMyTicket:\n // FIXME(MOD-1408): This permission is temporary\n return userPermissions.some((v) => v.startsWith('moderation.myTickets.'));\n case Page.flaggedUsers:\n return userPermissions.some((v) => v.startsWith('moderation.flaggedUsers.'));\n case Page.moderatedUsers:\n return userPermissions.some((v) => v.startsWith('moderation.moderatedUsers.'));\n case Page.moderatorMessage:\n return userPermissions.some((v) => v.startsWith('moderation.moderatorMessage.'));\n case Page.moderationAnalytics:\n return userPermissions.some((v) => v.startsWith('moderation.analytics.'));\n // calls\n case Page.callsStudio:\n return userPermissions.some((v) => v.startsWith('calls.studio.'));\n case Page.directCalls:\n return userPermissions.some((v) => v.startsWith('calls.direct.'));\n case Page.groupCalls:\n return userPermissions.some((v) => v.startsWith('calls.group.'));\n\n // live\n case Page.liveStudio:\n case Page.liveEvents:\n return userPermissions.some((v) => v.startsWith('calls.'));\n\n // desk\n case Page.allTickets:\n return userPermissions.some((v) => v.startsWith('desk.tickets.all.'));\n case Page.conversation:\n return userPermissions.some((v) => v.startsWith('desk.tickets.yours.'));\n case Page.views:\n return userPermissions.some((v) => v.startsWith('desk.views.'));\n case Page.assignmentLogs:\n return userPermissions.some((v) => v.startsWith('desk.assignmentLogs.'));\n case Page.proactiveChat:\n return userPermissions.some((v) => v.startsWith('desk.proactiveChats.'));\n case Page.customers:\n return userPermissions.some((v) => v.startsWith('desk.customers.'));\n case Page.deskDataExport:\n return userPermissions.some((v) => v.startsWith('desk.dataExports.'));\n case Page.monitor:\n return userPermissions.some((v) => v.startsWith('desk.monitoring.'));\n case Page.reports:\n return userPermissions.some((v) => v.startsWith('desk.reports.'));\n case Page.deskSettings:\n return userPermissions.some((v) => v.startsWith('desk.settings.'));\n\n // settings :: desk\n case DeskSettingsPage.general:\n return userPermissions.some((v) => v.startsWith('desk.settings.general.'));\n // (DFE-904): This permission is temporary and valid before GA\n case DeskSettingsPage.aiFeatures:\n return userPermissions.some((v) => v.startsWith('desk.admin'));\n case DeskSettingsPage.automation:\n return userPermissions.some((v) => v.startsWith('desk.settings.automation.'));\n case DeskSettingsPage.triggers:\n return userPermissions.some((v) => v.startsWith('desk.settings.triggers.'));\n case DeskSettingsPage.bots:\n return userPermissions.some((v) => v.startsWith('desk.settings.bots.'));\n case DeskSettingsPage.systemMessages:\n return userPermissions.some((v) => v.startsWith('desk.settings.systemMessages.'));\n case DeskSettingsPage.assignmentRules:\n return userPermissions.some((v) => v.startsWith('desk.settings.rules.assignment.'));\n case DeskSettingsPage.priorityRules:\n return userPermissions.some((v) => v.startsWith('desk.settings.rules.priority.'));\n case DeskSettingsPage.quickReplies:\n return userPermissions.some((v) => v.startsWith('desk.settings.quickReplies.'));\n case DeskSettingsPage.tags:\n return userPermissions.some((v) => v.startsWith('desk.settings.tags.'));\n case DeskSettingsPage.teams:\n return userPermissions.some((v) => v.startsWith('desk.settings.teams.'));\n case DeskSettingsPage.customerFields:\n return userPermissions.some((v) => v.startsWith('desk.settings.customerFields.'));\n case DeskSettingsPage.ticketFields:\n return userPermissions.some((v) => v.startsWith('desk.settings.ticketFields.'));\n case DeskSettingsPage.security:\n return userPermissions.some((v) => v.startsWith('desk.settings.security.'));\n case DeskSettingsPage.credentials:\n return userPermissions.some((v) => v.startsWith('desk.settings.credentials.'));\n case DeskSettingsPage.webhooks:\n return userPermissions.some((v) => v.startsWith('desk.settings.webhooks.'));\n case DeskSettingsPage.integrations:\n return userPermissions.some((v) => v.startsWith('desk.settings.integrations.'));\n default:\n return userPermissions.some((permission) => permission.split('.').includes(page));\n }\n};\n\ntype AuthorizationContext = {\n isFeatureEnabled: (feature: AllPremiumFeatures) => boolean;\n preparingFeatures: boolean;\n /**\n * Returns true if the authenticated user has any of the permissions passed as argument. You can optionally pass an\n * options argument which contains `combinedWith` property, which can be either `and` or `or` (default is `or`). If\n * it's `and`, it returns true only if the user has all the permissions passed. If it's `or`, it returns true if the\n * user has any of the permissions passed.\n */\n isPermitted: ReturnType;\n isAccessiblePage: ReturnType;\n isSelfService: boolean;\n} & Pick;\n\nexport const AuthorizationContext = createContext({\n isPermitted: () => false,\n isAccessiblePage: () => false,\n isFeatureEnabled: () => false,\n preparingFeatures: true,\n isSelfService: true,\n user: {\n country_code: '',\n email: '',\n new_email: '',\n email_verified: false,\n first_name: '',\n last_name: '',\n country_name: '',\n nickname: '',\n profile_id: 0,\n profile_url: '',\n user_id: 0,\n two_factor_authentication: false,\n verification_email_sent: false,\n coachmark_completed: false,\n join_date: '',\n account_locked: false,\n last_password_changed_at: '',\n is_onboarding_survey_done: false,\n },\n role: {\n name: 'GUEST',\n permissions: [],\n is_predefined: false,\n id: 0,\n created_at: '',\n updated_at: '',\n description: '',\n application_access_controls: [],\n application_access_controls_details: [],\n is_application_access_control: false,\n pii_access: 'none',\n },\n authenticated: false,\n});\n\nconst isSetEqual = (a: Set, b: Set) => {\n if (a.size !== b.size) {\n return false;\n }\n for (const aElement of a) {\n if (!b.has(aElement)) {\n return false;\n }\n }\n return true;\n};\n\nconst getLegacyFeatureSet = (premiumFeatures: Application['current_premium_features']) =>\n new Set(\n Object.entries(premiumFeatures)\n .filter(([, value]) => value === true) // filter boolean current_premium_feature values that are true\n .map(([key]) => LegacyPremiumFeatureMap[key])\n .filter((value): value is string => Boolean(value)), // filter possible undefined values\n );\n\nconst useLegacyFeatures = () => {\n const application = useApplication();\n const [result, setResult] = useState | null>(null);\n const latestResult = useLatestValue(result);\n\n useEffect(() => {\n const legacyFeatures = application && getLegacyFeatureSet(application.current_premium_features);\n const currentResult = latestResult.current;\n if (currentResult === legacyFeatures) {\n return;\n }\n if (currentResult == null || legacyFeatures == null || !isSetEqual(currentResult, legacyFeatures)) {\n setResult(legacyFeatures);\n return;\n }\n }, [application, latestResult]);\n\n const isLoading = application == null || result == null;\n\n return useMemo(() => ({ isLoading, result: result ? Array.from(result) : [] }), [isLoading, result]);\n};\n\nconst useFeatureEnabled = () => {\n const isSelfService = useOrganization((current) => !!current.is_self_serve);\n const legacyFeatures = useLegacyFeatures();\n const selfServiceFeatures = useSelfServiceFeatures();\n const preparingFeatures = legacyFeatures.isLoading || (isSelfService ? selfServiceFeatures.isLoading : false);\n\n const features = useMemo(() => {\n if (isSelfService) {\n return [...selfServiceFeatures.result, ...legacyFeatures.result];\n }\n return legacyFeatures.result;\n }, [isSelfService, legacyFeatures.result, selfServiceFeatures.result]);\n\n const isFeatureEnabled = useCallback((feature) => features.includes(feature), [features]);\n return {\n preparingFeatures,\n features,\n isFeatureEnabled,\n };\n};\n\nexport const AuthorizationContextProvider = ({ children }) => {\n const isSelfService = useOrganization((current) => !!current.is_self_serve);\n const { authenticated, user, role } = useAuth((auth) => ({\n authenticated: auth.authenticated,\n user: auth.user,\n role: auth.role,\n }));\n const { isFeatureEnabled, preparingFeatures } = useFeatureEnabled();\n\n /**\n * @deprecated Message search funtionality is deprecated.\n */\n const availablePermissions: PermissionKey[] = role.permissions.filter((permission) => {\n if (permission.includes('chat.messageSearch') && !isFeatureEnabled('message_search')) {\n return false;\n }\n return true;\n });\n\n // used to compare arrays in useMemo dependencies\n const availablePermissionsStringified = availablePermissions.join(',');\n\n const isPermitted = useMemo(\n () => isPermittedFactory(availablePermissionsStringified.split(',') as PermissionKey[]),\n [availablePermissionsStringified],\n );\n\n const isAccessiblePage = useMemo(\n () => isAccessiblePageFactory(availablePermissionsStringified.split(',') as PermissionKey[]),\n [availablePermissionsStringified],\n );\n\n return (\n \n {children}\n \n );\n};\n","import { LocalStorage } from '@utils/ClientStorage';\n\nexport const featureFlags = [\n { id: 'aiChatbotSunsetForNewOrg', title: 'AI Chatbot Sunset - New Org' },\n { id: 'aiChatbotSunsetForNewApp', title: 'AI Chatbot Sunset - New App on old org' },\n { id: 'intlInspector', title: 'Enable intl inspector' },\n { id: 'deskIntlKo', title: 'Desk Language: Korean' },\n { id: 'mockWoowahan', title: '[Desk] Mock Woowahan Organization' },\n { id: 'allowedChannelCustomTypes', title: 'Use allowed channel custom types configured in Insight' },\n { id: 'rtl', title: 'Allow RTL' },\n { id: 'spotv', title: 'SPOTV' },\n { id: 'allowAudioRoomInStudio', title: 'Allow to create and join audio room in Calls studio' },\n { id: 'allowAccessModeration', title: 'Allow to access moderation pages' },\n { id: 'allowedGroupChannelSearchMember', title: 'Enable member search in group channels' },\n { id: 'categoriesReorder', title: 'Category filters reorder' },\n { id: 'messageDeletion', title: 'Message deletion' },\n { id: 'smsIntegration', title: 'SMS Integration' },\n { id: 'coupang', title: 'Coupang' },\n { id: 'knowledgeManagement', title: 'AI Knowledge Management Centre' },\n { id: 'tving', title: 'Tving' },\n { id: 'rakuten', title: 'Rakuten' },\n { id: 'allowAeroMode', title: 'Aero' },\n] as const;\n\nexport type FeatureFlagKey = (typeof featureFlags)[number]['id'];\n\nconst toggleFeatureFlag = (key: FeatureFlagKey, isEnabled: boolean) => {\n if (isEnabled) {\n LocalStorage.upsertObject('featureFlags', { [key]: true });\n return;\n }\n LocalStorage.removeFromObject('featureFlags', [key]);\n};\n\nconst isFeatureFlagEnabled = (key: FeatureFlagKey) => {\n return LocalStorage.getObject('featureFlags')?.[key] === true;\n};\n\nexport const FeatureFlagStore = { toggle: toggleFeatureFlag, get: isFeatureFlagEnabled };\n","import React, { createContext, useCallback, useState } from 'react';\n\nimport type { FeatureFlagKey } from './featureFlagStore';\nimport { FeatureFlagStore, featureFlags } from './featureFlagStore';\n\ntype FeatureFlagMap = Partial>;\ntype FeatureFlagContextValue = {\n toggle: (key: FeatureFlagKey, isEnabled: boolean) => void;\n flags: FeatureFlagMap;\n};\nexport const FeatureFlagContext = createContext({ toggle: () => {}, flags: {} });\n\nconst featureFlagKeys = featureFlags.map((flag) => flag.id);\nexport const FeatureFlagContextProvider: React.FC<{ children: React.ReactNode }> = ({ children }) => {\n const currentFlags: FeatureFlagMap = featureFlagKeys.reduce((acc, key) => {\n acc[key] = FeatureFlagStore.get(key);\n return acc;\n }, {});\n const [flagMap, setFlagMap] = useState(currentFlags);\n const toggle: FeatureFlagContextValue['toggle'] = useCallback((key, isEnabled) => {\n FeatureFlagStore.toggle(key, isEnabled);\n setFlagMap((flagMap) => ({ ...flagMap, [key]: isEnabled }));\n }, []);\n\n return ;\n};\n","import { useContext } from 'react';\n\nimport { FeatureFlagContext } from '@utils/featureFlags';\n\nconst useFeatureFlags = () => useContext(FeatureFlagContext);\n\nexport default useFeatureFlags;\n","import { useMemo } from 'react';\n\nimport useOrganization from '../useOrganization';\n\nexport enum DeskLocale {\n DEFAULT = 'en_US',\n /** @knipignore */\n en_US = 'en_US',\n ko_KR = 'ko_KR',\n}\n\nconst DEFAULT_LOCALE = DeskLocale.DEFAULT;\n\n/**\n * Retrieve language_COUNTRY string from Organization attributes\n * @param {string} [locale=en_US] - language_COUNTRY value (for example: en_US, ko_KR, en, ko)\n * @returns {boolean} whether Organization attributes has deskSettingsLocaleSet value, which equals to or starts with the value of locale\n */\nconst useIsDeskLocale = (locale: DeskLocale = DEFAULT_LOCALE) => {\n const { attributes } = useOrganization() || {};\n\n return useMemo(() => {\n const organizationLocaleName = attributes?.deskSettingsLocaleSet || DEFAULT_LOCALE;\n return organizationLocaleName.startsWith(locale);\n }, [attributes?.deskSettingsLocaleSet, locale]);\n};\n\nexport default useIsDeskLocale;\n","import { useContext } from 'react';\n\nimport { AuthorizationContext } from '@authorization/authorizationContext';\n\n/**\n * Hook for handle authorization context\n */\nconst useAuthorization = () => useContext(AuthorizationContext);\n\nexport default useAuthorization;\n","import { useMemo } from 'react';\n\nimport useIsDeskLocale, { DeskLocale } from '..';\nimport useAuthorization from '../../useAuthorization';\nimport useFeatureFlags from '../../useFeatureFlags';\n\nexport const useIsDeskLocaleKoKR = () => {\n const { isPermitted } = useAuthorization();\n const isDeskLocaleKoKR = useIsDeskLocale(DeskLocale.ko_KR);\n const {\n flags: { deskIntlKo },\n } = useFeatureFlags();\n\n return useMemo(\n () => isPermitted(['desk.agent', 'desk.admin']) && (deskIntlKo || isDeskLocaleKoKR),\n [deskIntlKo, isDeskLocaleKoKR, isPermitted],\n );\n};\n","export default function getIntlKeyMessages(originalMessages: Record) {\n return Object.keys(originalMessages).reduce((acc, cur) => {\n acc[cur] = cur;\n return acc;\n }, {});\n}\n","import { useMemo } from 'react';\n\nimport { useQuery } from '@tanstack/react-query';\n\nimport getIntlKeyMessages from './getIntlKeyMessages';\n\nconst languageLoaders: Record<'en' | 'ko', () => Promise>> = {\n en: async () => {\n const { languageEN } = await import('./en');\n return languageEN.messages;\n },\n ko: async () => {\n const { languageKO } = await import('./ko');\n return languageKO.messages;\n },\n};\n\nconst useIntlMessages = (locale: 'en' | 'ko' | 'key') => {\n const queryLocale = locale === 'key' ? 'en' : locale;\n const queryKey = ['intlMessages', queryLocale];\n const { isLoading, data: loadedMessages } = useQuery({\n queryKey,\n queryFn: languageLoaders[queryLocale],\n });\n\n const data = useMemo(() => {\n if (!loadedMessages) {\n return loadedMessages;\n }\n\n return locale === 'key' ? getIntlKeyMessages(loadedMessages) : loadedMessages;\n }, [loadedMessages, locale]);\n\n return { isLoading, data };\n};\n\nexport default useIntlMessages;\n","import type { FC } from 'react';\nimport React, { createContext } from 'react';\n\nimport { I18nProvider } from '@react-aria/i18n';\nimport { IntlProvider } from 'react-intl';\n\nimport { DEFAULT_LOCALE } from '@constants';\nimport useFeatureFlags from '@hooks/useFeatureFlags';\nimport { useIsDeskLocaleKoKR } from '@hooks/useIsDeskLocale/locales/ko_KR';\n\nimport useIntlMessages from './useIntlMessages';\n\nexport const IntlMessagesLoadingContext = createContext<{ isLoading: boolean }>({ isLoading: false });\n\nexport const ConnectedIntlProvider: FC<{ children: React.ReactNode }> = ({ children }) => {\n const isDeskLocaleKoKR = useIsDeskLocaleKoKR();\n\n const {\n flags: { intlInspector },\n } = useFeatureFlags();\n\n const locale = (() => {\n if (intlInspector) {\n return 'key';\n }\n if (isDeskLocaleKoKR) {\n return 'ko';\n }\n return DEFAULT_LOCALE;\n })();\n\n const { isLoading, data: messages } = useIntlMessages(locale);\n\n return (\n \n \n {children}\n \n \n );\n};\n","import type { ReactNode } from 'react';\nimport { useContext, useMemo } from 'react';\n\nimport type { FormatXMLElementFn, Options, PrimitiveType } from 'intl-messageformat';\nimport { useIntl } from 'react-intl';\n\nimport { IntlMessagesLoadingContext } from '@/intl/connectedIntlProvider';\nimport type { calls, chat, common, core, desk, oldMessages, ui } from '@/intl/messages';\n\nexport type MessageKeys =\n | keyof typeof common\n | keyof typeof chat\n | keyof typeof core\n | keyof typeof desk\n | keyof typeof calls\n | keyof typeof ui\n | keyof typeof oldMessages;\n\ntype AppMessageDescriptor = { id: MessageKeys };\n\ninterface FormatMessage {\n (\n descriptor: AppMessageDescriptor,\n values?: Record>,\n opts?: Options,\n ): string;\n (\n descriptor: AppMessageDescriptor,\n values?: Record>,\n opts?: Options,\n ): ReactNode;\n}\n\nfunction useAppIntl() {\n const { isLoading: isLoadingMessages } = useContext(IntlMessagesLoadingContext);\n const intl = useIntl();\n\n return useMemo(() => {\n const formatMessage: FormatMessage = (descriptor, values, opts) =>\n isLoadingMessages ? '' : intl.formatMessage(descriptor, values, opts);\n\n return { ...intl, formatMessage };\n }, [intl, isLoadingMessages]);\n}\n\nexport type AppIntlShape = ReturnType;\n\nexport default useAppIntl;\n","import type { SetupIntent } from '@stripe/stripe-js';\n\nimport { axios, getGateURL } from '@api/shared';\n\nexport const fetchCardInfo = ({ organization_uid }) => {\n return axios.get(`${getGateURL()}/dashboard_api/organizations/${organization_uid}/card/`);\n};\n\nexport const initCardRegistration: InitCardRegistrationAPI = (organization_uid) => {\n return axios.post(`${getGateURL()}/dashboard_api/organizations/${organization_uid}/init_card_registration/`, {});\n};\n\nexport const registerCard = (organization_uid: string, payment_method_id: SetupIntent['payment_method']) => {\n return axios.post(`${getGateURL()}/dashboard_api/organizations/${organization_uid}/card/`, {\n payment_method: payment_method_id,\n });\n};\n\nexport const fetchCurrentSubscription: FetchCurrentSubscriptionAPI = (product) => {\n return axios.get(`${getGateURL()}/dashboard_api/billing/subscriptions/current/?product=${product}`);\n};\n\nexport const fetchSubscriptionInfo: FetchSubscriptionInfoAPI = (product) => {\n return axios.get(`${getGateURL()}/dashboard_api/billing/subscriptions/info/?product=${product}`);\n};\n\nexport const fetchSubscriptionByMonth: FetchSubscriptionByMonthAPI = ({ month, product }) => {\n return axios.get(`${getGateURL()}/dashboard_api/billing/subscriptions/month/?month=${month}&product=${product}`);\n};\n\nexport const subscribeSubscriptionPlan: SubscribeSubscriptionPlanAPI = (payload) => {\n return axios.post(`${getGateURL()}/dashboard_api/billing/subscriptions/subscribe/`, payload);\n};\n\nexport const unsubscribeSubscriptionPlan: UnsubscribeSubscriptionPlanAPI = ({ subscription_id, endReason }) => {\n return axios.post(`${getGateURL()}/dashboard_api/billing/subscriptions/${subscription_id}/unsubscribe/`, {\n end_reason: endReason,\n });\n};\n\nexport const cancelUnsubscribeSubscription: CancelUnsubscribeSubscriptionAPI = (subscription_id) => {\n return axios.post(`${getGateURL()}/dashboard_api/billing/subscriptions/${subscription_id}/cancel_unsubscribe/`, {});\n};\n\nexport const cancelDowngradeSubscription: CancelDowngradeSubscriptionAPI = (subscription_id) => {\n return axios.post(`${getGateURL()}/dashboard_api/billing/subscriptions/${subscription_id}/cancel_downgrade/`, {});\n};\n\nexport const fetchInvoices: FetchInvoicesAPI = (params) => {\n return axios.get(`${getGateURL()}/dashboard_api/billing/invoices/`, {\n params,\n });\n};\n\nexport const fetchBillingContacts: FetchBillingContactAPI = (uid) => {\n return axios.get(`${getGateURL()}/dashboard_api/organizations/${uid}/billing_contacts/`);\n};\n\nexport const updateBillingContacts: UpdateBillingContactsAPI = ({ uid, payload }) => {\n return axios.put(`${getGateURL()}/dashboard_api/organizations/${uid}/billing_contacts/`, payload);\n};\n\nexport const fetchSubscriptionPlans: FetchSubscriptionPlansAPI = (organization_uid) => {\n return axios.get(`${getGateURL()}/dashboard_api/billing/plans/?organization_uid=${organization_uid}`);\n};\n\nexport const fetchVoucherSubscription = () => {\n return axios.get(`${getGateURL()}/dashboard_api/billing/vouchers/subscription/`, {});\n};\n\nexport const updateVoucherSubscription = (payload: VoucherSubscription) => {\n return axios.put(`${getGateURL()}/dashboard_api/billing/vouchers/subscription/`, payload, {});\n};\n\nexport const deleteVoucherSubscription = () => {\n return axios.delete(`${getGateURL()}/dashboard_api/billing/vouchers/subscription/`, {});\n};\n\nexport const fetchVouchers = (params?: {\n status?: 'READY' | 'ACTIVE' | 'EXPIRED';\n ordering?: 'created_at' | '-created_at' | 'start_dt' | '-start_dt' | 'status';\n limit?: number;\n}) => {\n return axios.get>(`${getGateURL()}/dashboard_api/billing/vouchers/`, {\n params,\n });\n};\n\nexport const createVoucher = (payload: { credit: number; paid_amount: number; duration_days: number }) => {\n return axios.post(`${getGateURL()}/dashboard_api/billing/vouchers/`, payload, {});\n};\n\nexport const purchaseVoucher = (voucherUid: string) => {\n return axios.post(`${getGateURL()}/dashboard_api/billing/vouchers/${voucherUid}/pay/`, {});\n};\n\nexport const activateVoucher = (voucherUid: string) => {\n return axios.put(`${getGateURL()}/dashboard_api/billing/vouchers/${voucherUid}/activate/`, {});\n};\n\nexport const fetchCreditRates = () => {\n return axios.get(`${getGateURL()}/dashboard_api/billing/vouchers/credit_rates_per_minute/`, {});\n};\n\nexport const fetchDiscountTable = () => {\n return axios.get(`${getGateURL()}/dashboard_api/billing/vouchers/discount_table/`, {});\n};\n\nexport const fetchACHCreditTransferSource = (uid) => {\n return axios.get(\n `${getGateURL()}/dashboard_api/organizations/${uid}/ach_credit_transfer_source/`,\n {},\n );\n};\n\ntype CallsVoucherResponse = {\n usage: number; // second\n used_credit: number;\n others_usage: number; // second\n others_used_credit: number;\n org_credit: number;\n org_remaining_credit: number;\n};\nexport const fetchVoucherCreditUsageByApp = (appId: string) => {\n return axios.get<{ data: CallsVoucherResponse }>(\n `${getGateURL()}/dashboard_api/applications/${appId}/voice_video_usage_with_org_usages`,\n );\n};\n\ntype VoucherCreditConsumerDataList =\n | 'direct_audio'\n | 'direct_video'\n | 'direct_p2p_audio'\n | 'direct_p2p_video'\n | 'small_room_for_audio_only'\n | 'large_room_for_audio_only'\n | 'small_room_for_video'\n | 'large_room_for_video'\n | 'single_host_live' // changed to live_event_for_video but keeping it for backward compatibility\n | 'live_event_for_video'\n | 'multiple_hosts_live'\n | 'single_host_audio_only_live' // changed to live_event_for_audio_only but keeping it for backward compatibility\n | 'live_event_for_audio_only'\n | 'direct_recording_audio'\n | 'direct_recording_video'\n | 'cloud_recording_audio_direct_call'\n | 'cloud_recording_audio_group_call'\n | 'cloud_recording_audio_live_event'\n | 'cloud_recording_video_direct_call'\n | 'cloud_recording_video_group_call'\n | 'cloud_recording_video_live_event';\n\n// Additionally created based on the above list\ntype AdditionalVoucherCreditConsumerDataList = 'remaining';\n\nexport type VoucherCreditConsumerType = VoucherCreditConsumerDataList | AdditionalVoucherCreditConsumerDataList;\n\ntype CallsVoucherUsage = {\n record_date: string;\n updated_dt: string;\n} & {\n [key in VoucherCreditConsumerType]: {\n record_date: string;\n usage: number;\n used_credit: number;\n };\n};\n\nexport type Resolution = 'daily' | 'monthly';\nexport type Range = { start: string; end: string };\n\nexport const fetchVoucherCreditUsageByAppWithRange = (appId: string, range: Resolution, params: { params: Range }) => {\n return axios.get<{ data: CallsVoucherUsage[] }>(\n `${getGateURL()}/dashboard_api/applications/${appId}/voice_video_usage/${range}`,\n params,\n );\n};\n\nexport type CallsVoucherUsageByType = {\n type: VoucherCreditConsumerType;\n usage: number;\n used_credit: number;\n percentage: number;\n};\n\nexport const fetchVoucherCreditUsageByCallsType = (orgId: string, { order }) => {\n return axios.get<{ data: CallsVoucherUsageByType[] }>(\n `${getGateURL()}/dashboard_api/organizations/${orgId}/voice_video_usage_by_type`,\n { params: { order } },\n );\n};\n\nexport type CallsVoucherUsageByAllAppsResponse = {\n [key in VoucherCreditConsumerDataList]: {\n usage: number;\n used_credit: number;\n percentage: number;\n };\n};\n\nexport const fetchVoucherCreditUsageByAllApps = (orgId: string) => {\n return axios.get<{ data: CallsVoucherUsageByAllAppsResponse }>(\n `${getGateURL()}/dashboard_api/organizations/${orgId}/voice_video_usage`,\n );\n};\n\ntype VoucherCreditUsageByRange = {\n record_date: string;\n usage: number;\n used_credit: number;\n};\nexport type VoucherCreditUsageByRangeResponse = {\n total: VoucherCreditUsageByRange[];\n calls: VoucherCreditUsageByRange[];\n live: VoucherCreditUsageByRange[];\n};\n\nexport const fetchVoucherCreditUsageByRange = (orgId: string, resolution: Resolution, { start, end }: Range) => {\n return axios.get<{ data: VoucherCreditUsageByRangeResponse }>(\n `${getGateURL()}/dashboard_api/organizations/${orgId}/voice_video_usage/${resolution}`,\n { params: { start, end } },\n );\n};\n","import { useCallback, useMemo } from 'react';\n\nimport { useQuery, useQueryClient } from '@tanstack/react-query';\n\nimport { fetchCurrentSubscription } from '@common/api/billing';\nimport type { SubscriptionProduct } from '@constants';\n\nimport useAuthorization from './useAuthorization';\n\nconst useCurrentSubscription = (product: SubscriptionProduct) => {\n const { isSelfService } = useAuthorization();\n const queryClient = useQueryClient();\n const key = useMemo(() => {\n return ['currentSubscription', { product }];\n }, [product]);\n const { isError, isLoading, status, data, refetch } = useQuery({\n queryKey: key,\n queryFn: () => fetchCurrentSubscription(product),\n enabled: isSelfService,\n });\n /**\n * if there is no current subscription, then the response is an empty string \"\",\n * which can be normalized to null using || operator.\n */\n\n const update = useCallback(\n (data: Subscription) => {\n queryClient.setQueryData(key, { ...queryClient.getQueryData(key), data });\n },\n [key, queryClient],\n );\n\n return {\n isError,\n isLoading,\n isLoaded: status === 'success' || status === 'error',\n currentSubscription: data?.data || null,\n update,\n refetch,\n };\n};\n\nexport default useCurrentSubscription;\n","import type { RootState } from '@/store';\n\nimport { useShallowEqualSelector } from '.';\n\ntype LocalState = RootState['desk'];\ntype LocalSelector = (state: LocalState) => T;\n\nexport function useDesk(): LocalState;\nexport function useDesk(selector: LocalSelector): T;\n\nexport function useDesk(selector?: LocalSelector) {\n return useShallowEqualSelector((state) => (selector ? selector(state.desk) : (state.desk as T)));\n}\n","import { useDesk } from '@/redux/hooks/desk';\nimport type { RootState } from '@/store';\n\ntype LocalState = RootState['desk']['project'];\ntype LocalSelector = (state: LocalState) => T;\n\nfunction useDeskProject(): LocalState;\nfunction useDeskProject(selector: LocalSelector): T;\n\nfunction useDeskProject(selector?: LocalSelector) {\n return useDesk((state) => (selector ? selector(state.project) : state.project));\n}\n\nexport default useDeskProject;\n","import { getLocalTimeZone } from '@internationalized/date';\n\nimport { useMatch } from '@/router';\n\nimport useDeskProject from './useDeskProject';\n\nconst useIsDesk = () => {\n try {\n return !!useMatch('/:appId/desk/*');\n } catch {\n return false;\n }\n};\n\nconst useDeskOrLocalTimeZone = () => {\n const isDesk = useIsDesk();\n const timeZone = useDeskProject((project) => project.timezone ?? getLocalTimeZone());\n return isDesk ? timeZone : getLocalTimeZone();\n};\n\nexport default useDeskOrLocalTimeZone;\n","import { useCallback } from 'react';\n\nimport { today } from '@internationalized/date';\n\nimport useDeskOrLocalTimeZone from './useDeskOrLocalTimeZone';\n\nconst useGetToday = () => {\n const timeZone = useDeskOrLocalTimeZone();\n\n return useCallback(() => today(timeZone), [timeZone]);\n};\n\nexport default useGetToday;\n","import useOrganization from './useOrganization';\n\n/* returns whether Calls is activated in the current organization. */\nconst useIsCallsActivatedOrganization = () => {\n const isCallsActivatedOrganization = useOrganization((current) => current.is_calls_enabled);\n return isCallsActivatedOrganization;\n};\n\nexport default useIsCallsActivatedOrganization;\n","import { axios, getGateURL } from '@api/shared';\n\nexport const fetchUsageAlertEmail: FetchUsageAlertEmail = (uid) => {\n return axios.get(`${getGateURL()}/dashboard_api/organizations/${uid}/usage_alert_email/`);\n};\n\nexport const updateUsageAlertEmail: UpdateUsageAlertEmail = (uid, payload) => {\n return axios.put(`${getGateURL()}/dashboard_api/organizations/${uid}/usage_alert_email/`, payload);\n};\n\nexport const fetchOrganizationDailyUsage: FetchOrganizationDailyUsage = (uid, params) => {\n return axios.get(`${getGateURL()}/dashboard_api/organizations/${uid}/daily_usage/?${params}`);\n};\n\nexport const fetchOrganizationDailyAccumulateUsage: FetchOrganizationDailyAccumulateUsage = (uid, params) => {\n return axios.get(`${getGateURL()}/dashboard_api/organizations/${uid}/daily_acc_usage/?${params}`);\n};\n\nexport const fetchOrganizationMonthlyUsage: FetchOrganizationMonthlyUsage = (uid, params) => {\n return axios.get(`${getGateURL()}/dashboard_api/organizations/${uid}/monthly_usage/?${params}`);\n};\n\n/**\n * Not used currently but we could use this someday\n */\nexport const fetchApplicationDailyUsage: FetchApplicationDailyUsage = (app_id, params) => {\n return axios.get(`${getGateURL()}/dashboard_api/applications/${app_id}/daily_usage/`, {\n params,\n });\n};\n\nexport const fetchMonthlyUsageByApplications: FetchMonthlyUsageByApplications = (uid, params) => {\n return axios.get(`${getGateURL()}/dashboard_api/organizations/${uid}/monthly_feature_usage_detail/?${params}`);\n};\n\nexport const fetchApplicationMonthlyUsageWithOrgUsages: FetchApplicationMonthlyUsageWithOrgUsages = (\n app_id,\n params,\n) => {\n return axios.get(`${getGateURL()}/dashboard_api/applications/${app_id}/monthly_usage_with_org_usages/`, {\n params,\n });\n};\n","import { Time, ZonedDateTime, parseAbsolute, toCalendarDateTime, toZoned } from '@internationalized/date';\nimport { CalendarDate, parseDate } from '@internationalized/date';\n\nexport type DatePropValue = T | string | null;\n\nexport const safeParseDate = (value: string) => {\n try {\n return parseDate(value);\n } catch {\n return undefined;\n }\n};\n\nconst safeParseAbsolute = (value: string, timeZone: string) => {\n try {\n return parseAbsolute(value, timeZone);\n } catch {\n return undefined;\n }\n};\n\nexport const convertToCalendarDate = (value: DatePropValue | Date | undefined) => {\n if (value instanceof CalendarDate) {\n return value;\n }\n if (value instanceof Date) {\n return new CalendarDate(value.getFullYear(), value.getMonth() + 1, value.getDate());\n }\n if (typeof value === 'string') {\n return safeParseDate(value.substring(0, 10));\n }\n return undefined;\n};\n\nexport const convertToZonedDateTime = (\n value: DatePropValue | CalendarDate | Date | number | undefined,\n timeZone: string,\n) => {\n if (value instanceof ZonedDateTime) {\n return value;\n }\n if (value instanceof CalendarDate) {\n return toZoned(value, timeZone);\n }\n if (value instanceof Date) {\n return safeParseAbsolute(value.toISOString(), timeZone);\n }\n if (typeof value === 'string') {\n return safeParseAbsolute(value, timeZone);\n }\n if (typeof value === 'number') {\n const date = new Date(value);\n return safeParseAbsolute(date.toISOString(), timeZone);\n }\n return undefined;\n};\n\nconst MILLISECONDS_IN_SECOND = 1000;\nconst MILLISECONDS_IN_MINUTE = 60 * MILLISECONDS_IN_SECOND;\nconst MILLISECONDS_IN_HOUR = 60 * MILLISECONDS_IN_MINUTE;\nconst MILLISECONDS_IN_DAY = 24 * MILLISECONDS_IN_HOUR;\nexport const getZonedDateTimeDifference = (\n a: ZonedDateTime,\n b: ZonedDateTime,\n unit?: 'day' | 'hour' | 'minute' | 'second',\n) => {\n const diff = a.compare(b);\n switch (unit) {\n case 'day': {\n return diff > 0 ? Math.floor(diff / MILLISECONDS_IN_DAY) : Math.ceil(diff / MILLISECONDS_IN_DAY);\n }\n case 'hour': {\n return diff > 0 ? Math.floor(diff / MILLISECONDS_IN_HOUR) : Math.ceil(diff / MILLISECONDS_IN_HOUR);\n }\n case 'minute': {\n return diff > 0 ? Math.floor(diff / MILLISECONDS_IN_MINUTE) : Math.ceil(diff / MILLISECONDS_IN_MINUTE);\n }\n case 'second': {\n return diff > 0 ? Math.floor(diff / MILLISECONDS_IN_SECOND) : Math.ceil(diff / MILLISECONDS_IN_SECOND);\n }\n default: {\n return diff;\n }\n }\n};\n\nexport const getZonedDateStartOfDay = (date: CalendarDate, timeZone: string) => {\n return toZoned(toCalendarDateTime(date, new Time(0, 0)), timeZone);\n};\n\nexport const getZonedDateEndOfDay = (date: CalendarDate, timeZone: string) => {\n return toZoned(toCalendarDateTime(date, new Time(23, 59, 59, 999)), timeZone);\n};\n\nexport const getCalendarDateYearMonthString = (date: CalendarDate) => {\n return date.toString().substring(0, 7);\n};\n","import type { DependencyList } from 'react';\nimport { useCallback, useRef, useState } from 'react';\n\ntype State =\n | { status: 'init'; error?: undefined; data?: undefined }\n | { status: 'loading'; error?: any; data?: T }\n | { status: 'error'; error: any; data?: undefined }\n | { status: 'success'; error?: undefined; data: T };\n\n/**\n * @param fn - async function to fetch the data\n * @param deps - dependency list of `fn`. If one of the dependencies changes, the reference to the returned callback\n * function will be updated, which can be useful for triggering a refetch of the data.\n * @param initialState - initial internal state\n *\n * @returns State object and a callback function to trigger fetching the data. The promise returned by the callback\n * function will resolve with the fetched data, or resolve with an error object if `fn()` call rejects.\n */\nconst useAsync = (\n fn: (...args: Args) => Promise,\n deps: DependencyList,\n initialState: State = { status: 'init' },\n) => {\n const lastCallId = useRef(0);\n const [state, set] = useState>(initialState);\n\n const callback = useCallback((...args: Args) => {\n const callId = ++lastCallId.current;\n set((state) => ({ ...state, status: 'loading' }));\n\n fn(...args).then(\n (data) => {\n callId === lastCallId.current && set({ data, status: 'success' });\n return data;\n },\n (error) => {\n callId === lastCallId.current && set({ error, status: 'error' });\n return error;\n },\n );\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, deps);\n\n return [state, callback] as const;\n};\n\nexport default useAsync;\n","import { useEffect } from 'react';\n\nimport type { CalendarDate } from '@internationalized/date';\nimport qs from 'qs';\n\nimport { fetchOrganizationMonthlyUsage } from '@common/api/usage';\nimport { getCalendarDateYearMonthString } from '@utils/InternationalizedDate';\n\nimport useAsync from './useAsync';\nimport useOrganization from './useOrganization';\n\nconst useMonthlyUsage = (date: CalendarDate) => {\n const { uid } = useOrganization();\n const [{ status, data }, load] = useAsync(async () => {\n if (uid) {\n const params = qs.stringify({\n start_month: getCalendarDateYearMonthString(date),\n end_month: getCalendarDateYearMonthString(date),\n });\n return fetchOrganizationMonthlyUsage(uid, params);\n }\n }, [date, uid]);\n\n useEffect(() => {\n load();\n }, [load]);\n\n return {\n isLoadingUsage: status === 'loading',\n monthlyUsage: data?.data?.data[0],\n };\n};\n\nexport default useMonthlyUsage;\n","import type { FC, ReactNode } from 'react';\nimport { createContext, useCallback, useContext, useEffect, useMemo, useRef } from 'react';\n\nimport isEmpty from 'lodash/isEmpty';\n\nimport { ChatFeatureName, OrganizationStatus, SubscriptionName, SubscriptionProduct } from '@constants';\nimport { toast } from '@feather/components/notification';\nimport useAppIntl from '@hooks/useAppIntl';\nimport useAuthorization from '@hooks/useAuthorization';\nimport useCurrentSubscription from '@hooks/useCurrentSubscription';\nimport useGetToday from '@hooks/useGetToday';\nimport useIsCallsActivatedOrganization from '@hooks/useIsCallsActivatedOrganization';\nimport useMonthlyUsage from '@hooks/useMonthlyUsage';\nimport useOrganization from '@hooks/useOrganization';\nimport safeParseNumber from '@utils/safeParseNumber';\n\nconst defaultUsage = {\n usage: 0,\n quota: 0,\n limit: 10000,\n};\n\nconst CurrentChatSubscriptionContext = createContext<{\n isLoading: boolean;\n isLoaded: boolean;\n currentSubscription: Subscription | null;\n isFreeTrial: boolean;\n isFreeTrialMissing: boolean;\n isDeveloperPlan: boolean;\n isPlanOverChargeable: boolean;\n update: (data: Subscription) => void;\n chatUsage: {\n [key: string]: {\n usage: number;\n quota: number;\n limit: number;\n };\n };\n isAiSubscription: boolean;\n}>({\n isLoading: false,\n currentSubscription: null,\n isLoaded: false,\n isFreeTrial: false,\n isFreeTrialMissing: false,\n isDeveloperPlan: false,\n isPlanOverChargeable: false,\n isAiSubscription: false,\n update: () => {},\n chatUsage: {\n [ChatFeatureName.MonthlyActiveUser]: defaultUsage,\n [ChatFeatureName.PeakConnection]: defaultUsage,\n [ChatFeatureName.AiEngine]: defaultUsage,\n },\n});\n\nexport const CurrentChatSubscriptionProvider: FC<{ children?: ReactNode }> = ({ children }) => {\n const intl = useAppIntl();\n const { isSelfService } = useAuthorization();\n const { isOrganizationEmpty, isOrganizationDeactivated } = useOrganization((organization) => ({\n isOrganizationEmpty: isEmpty(organization),\n isOrganizationDeactivated:\n !isEmpty(organization) && organization && organization.status !== OrganizationStatus.Active,\n }));\n\n const isCallsEnabledOrganization = useIsCallsActivatedOrganization();\n const {\n isLoading: isLoadingChatSubscription,\n currentSubscription,\n isLoaded,\n update,\n } = useCurrentSubscription(SubscriptionProduct.Chat);\n const isLoading = isOrganizationEmpty || !isLoaded || isLoadingChatSubscription;\n const subscriptionName = currentSubscription?.subscription_name;\n\n const isAiSubscription = currentSubscription?.subscription_name.startsWith('ai_') ?? false;\n\n /**\n * Chat subscription can be null when either\n * 1) Organization has been deactivated or,\n * 2) Calls has been activated.\n *\n * Otherwise, a chat subscription must exist.\n */\n\n const getSelfServiceSubscriptionProps = useCallback((): {\n isFreeTrial: boolean;\n isFreeTrialMissing: boolean;\n isDeveloperPlan: boolean;\n isPlanOverChargeable: boolean;\n } => {\n if (isLoading || !isSelfService) {\n return { isFreeTrial: false, isFreeTrialMissing: false, isDeveloperPlan: false, isPlanOverChargeable: false };\n }\n\n return {\n isFreeTrial: subscriptionName === SubscriptionName.FreeTrial,\n isFreeTrialMissing: currentSubscription == null && !isCallsEnabledOrganization && !isOrganizationDeactivated,\n isDeveloperPlan: subscriptionName === SubscriptionName.Developer,\n isPlanOverChargeable: subscriptionName\n ? ![SubscriptionName.Developer, SubscriptionName.FreeTrial].includes(subscriptionName)\n : false,\n };\n }, [\n currentSubscription,\n isCallsEnabledOrganization,\n isLoading,\n isOrganizationDeactivated,\n isSelfService,\n subscriptionName,\n ]);\n\n const { isFreeTrialMissing, isDeveloperPlan, isPlanOverChargeable, isFreeTrial } = getSelfServiceSubscriptionProps();\n\n const getToday = useGetToday();\n const date = useRef(getToday());\n\n const { monthlyUsage } = useMonthlyUsage(date.current);\n\n const chatUsage = useMemo(() => {\n const isAvailable = monthlyUsage && currentSubscription?.plan;\n\n return {\n [ChatFeatureName.AiEngine]: isAvailable\n ? {\n usage: safeParseNumber(monthlyUsage.ai_engine, { as: 'float' }),\n quota: currentSubscription.ai_chatbot_plan.ai_chatbot.purchased_units,\n limit: currentSubscription.ai_chatbot_plan.ai_chatbot.hard_limit,\n }\n : defaultUsage,\n [ChatFeatureName.MonthlyActiveUser]: isAvailable\n ? {\n usage: monthlyUsage.mau,\n quota: currentSubscription.plan.mau.purchased_units,\n limit: currentSubscription.plan.mau.hard_limit,\n }\n : defaultUsage,\n [ChatFeatureName.PeakConnection]: isAvailable\n ? {\n usage: monthlyUsage.pc,\n quota: currentSubscription.plan.pc.purchased_units,\n limit: currentSubscription.plan.pc.hard_limit,\n }\n : defaultUsage,\n };\n }, [currentSubscription, monthlyUsage]);\n\n useEffect(() => {\n if (isFreeTrialMissing) {\n toast.warning({ message: intl.formatMessage({ id: 'common.noPlanError.toastErrorMessage' }) });\n }\n }, [intl, isFreeTrialMissing]);\n\n return (\n ({\n isLoading,\n isLoaded,\n currentSubscription,\n isFreeTrial,\n isFreeTrialMissing,\n isDeveloperPlan,\n isPlanOverChargeable,\n update,\n chatUsage,\n isAiSubscription,\n }),\n [\n isLoading,\n isLoaded,\n currentSubscription,\n isFreeTrial,\n isFreeTrialMissing,\n isDeveloperPlan,\n isPlanOverChargeable,\n update,\n chatUsage,\n isAiSubscription,\n ],\n )}\n >\n {children}\n \n );\n};\n\nexport const useCurrentChatSubscription = () => {\n const { isSelfService } = useAuthorization();\n const {\n isLoading: isLoadingPlan,\n isLoaded,\n currentSubscription,\n isFreeTrialMissing,\n ...rest\n } = useContext(CurrentChatSubscriptionContext);\n\n const isLoading = isSelfService ? isLoadingPlan : false;\n\n return { isLoading, isLoaded, isSelfService, currentSubscription, isFreeTrialMissing, ...rest };\n};\n","import useApplication from './useApplication';\n\nconst useAppId = () => useApplication((application) => application?.app_id ?? '');\n\nexport default useAppId;\n","import type { ReactNode } from 'react';\nimport { Children, useCallback, useMemo } from 'react';\n\nimport type { IntlShape } from '@formatjs/intl';\nimport { createIntl } from '@formatjs/intl';\nimport type { FormatXMLElementFn } from 'intl-messageformat';\nimport type { PrimitiveType } from 'react-intl';\nimport { useIntl } from 'react-intl';\n\nimport type { TranslationProps } from './useTranslation';\n\ninterface TFunction {\n (key: K): string;\n (key: K, values: Record>): string;\n (key: K, values: Record>): ReactNode;\n}\n\nconst useTranslationSync = <\n M extends Record = Record,\n K extends string = keyof M extends string ? keyof M : string,\n>(\n getMessages: (locale: string) => M,\n) => {\n const { locale } = useIntl();\n\n const intl = useMemo(() => {\n const translatedMessages = getMessages(locale);\n // Beware that this may impact the performance if there are many instances of the component that calls this hook rendered at the same time.\n return createIntl({ locale, messages: translatedMessages });\n }, [getMessages, locale]);\n\n return {\n t: useCallback(\n (key: K, values?: Parameters[1]) => {\n if (!values) {\n return intl.formatMessage({ id: key }) as string;\n }\n\n const result = intl.formatMessage({ id: key }, values);\n return Array.isArray(result) ? Children.toArray(result) : (result as string);\n },\n [intl],\n ) as TFunction,\n intl,\n };\n};\n\nexport default useTranslationSync;\nexport type { TranslationProps };\n","export enum DialogType {\n Delete = 'DELETE',\n Overage = 'OVERAGE',\n CreateApp = 'CREATE_APP',\n CallsFreeVoucher = 'CALLS_FREE_VOUCHER',\n ChangeAppName = 'CHANGE_APP_NAME',\n DeleteApplication = 'DELETE_APPLICATION',\n Custom = 'CUSTOM',\n Confirm = 'CONFIRM',\n ConfirmWithOrganizationName = 'CONFIRM_WITH_ORGANIZATION_NAME',\n Confirm1k = 'CONFIRM_1K',\n ReasonForCancel = 'REASON_FOR_CANCEL',\n ChangePassword = 'CHANGE_PASSWORD',\n InviteMember = 'INVITE_MEMBER',\n ChangeMemberRole = 'CHANGE_MEMBER_ROLE',\n RegisterCard = 'REGISTER_CARD',\n DeleteAccount = 'DELETE_ACCOUNT',\n RegisterTwoFactor = 'REGISTER_TWO_FACTOR',\n SamlOneMoreStepToGo = 'SAML_ONE_MORE_STEP_TO_GO',\n SelectApplicationsToAccess = 'SELECT_APPLICATIONS_TO_ACCESS',\n AnalyticsExport = 'ANALYTICS_EXPORT',\n AnnouncementDataDisplay = 'ANNOUNCEMENT_DATA_DISPLAY',\n CreateOpenChannel = 'CREATE_OPEN_CHANNEL',\n CreateGroupChannel = 'CREATE_GROUP_CHANNEL',\n ChangeToSupergroup = 'CHANGE_TO_SUPERGROUP',\n UpdateSDKUser = 'UPDATE_SDK_USER',\n CreateSDKUser = 'CREATE_SDK_USER',\n EditChannel = 'EDIT_CHANNEL',\n ChannelData = 'CHANNEL_DATA',\n ResourceMetadata = 'RESOURCE_METADATA',\n AdminMessage = 'ADMIN_MESSAGE',\n DeleteChannels = 'DELETE_CHANNELS',\n DeleteMessage = 'DELETE_MESSAGE',\n EditMessage = 'EDIT_MESSAGE',\n ModeratorInformation = 'MODERATOR_INFORMATION',\n BanMuteUser = 'BAN_MUTE_USER',\n DeactivateUser = 'DEACTIVATE_USER',\n ReactivateUser = 'REACTIVATE_USER',\n GetApiToken = 'GET_API_TOKEN',\n SubscriptionPlan = 'SUBSCRIPTION_PLAN',\n PushApnsSave = 'PUSH_APNS_SAVE',\n PushApnsVoipRegister = 'PUSH_APNS_VOIP_REGISTER',\n PushApnsVoipEdit = 'PUSH_APNS_VOIP_EDIT',\n PushFcmSave = 'PUSH_FCM_SAVE',\n PushHuaweiSave = 'PUSH_HUAWEI_SAVE',\n PushTester = 'PUSH_TESTER',\n CreateUser = 'CREATE_USER',\n DeleteUser = 'DELETE_USER',\n InviteAsGroupChannelMember = 'INVITE_AS_GROUP_CHANNEL_MEMBER',\n IssueUserAccessToken = 'ISSUE_USER_ACCESS_TOKEN',\n RegisterUserAsOperator = 'REGISTER_USER_AS_OPERATOR',\n AssignTransferTicketToAgent = 'ASSIGN_TRANSFER_TICKET_TO_AGENT',\n AssignTransferTicketToGroup = 'ASSIGN_TRANSFER_TICKET_TO_GROUP',\n CreateAgentGroup = 'CREATE_AGENT_GROUP',\n CloseTicket = 'CLOSE_TICKET',\n ConfirmEndOfChat = 'CONFIRM_END_OF_CHAT',\n UpdateAgentProfile = 'UPDATE_AGENT_PROFILE',\n ViewAgentProfile = 'VIEW_AGENT_PROFILE',\n CreateNewToken = 'CREATE_NEW_TOKEN',\n AddWebhook = 'ADD_WEBHOOK',\n EditWebhook = 'EDIT_WEBHOOK',\n DeleteWebhook = 'DELETE_WEBHOOK',\n ReopenTicket = 'REOPEN_TICKET',\n ExportTicket = 'EXPORT_TICKET',\n ChangeEmail = 'CHANGE_EMAIL',\n SelectTwitterStatusRecipients = 'SELECT_TWITTER_STATUS_RECIPIENTS',\n ReportsExport = 'REPORTS_EXPORT',\n ExportTicketsInfo = 'EXPORT_TICKETS_INFO',\n CreateProactiveChat = 'CREATE_PROACTIVE_CHAT',\n DeleteAgentGroup = 'DELETE_AGENT_GROUP',\n ManageDirectCallsColumns = 'MANAGE_DIRECT_CALLS_COLUMNS',\n ExportMissedTicket = 'EXPORT_MISSED_TICKET',\n ExportPendingTicket = 'EXPORT_PENDING_TICKET',\n ExportDirectCallLogs = 'EXPORT_DIRECT_CALL_LOGS',\n PhoneboothUserUnregister = 'PHONEBOOTH_USER_UNREGISTER',\n DirectCallsDurationLimit = 'DIRECT_CALLS_DURATION_LIMIT',\n CreateStudioRoom = 'CREATE_STUDIO_ROOM',\n CreateRoom = 'CREATE_ROOM',\n DeleteRoom = 'DELETE_ROOM',\n CallsEditCustomItems = 'CALLS_EDIT_CUSTOM_ITEMS',\n CallsCustomItemsColumns = 'CALLS_CUSTOM_ITEMS_COLUMNS',\n CallsStudioRoomInvite = 'CALLS_STUDIO_ROOM_INVITE',\n CallsStudioAddExistingRoom = 'CALLS_STUDIO_ADD_EXISTING_ROOM',\n CallsStudioMobileCreateUser = 'CALLS_STUDIO_MOBILE_CREATE_USER',\n CallsStudioMobileAddUser = 'CALLS_STUDIO_MOBILE_ADD_USER',\n CallsStudioMobileEditUser = 'CALLS_STUDIO_MOBILE_EDIT_USER',\n CallsStudioMobileRemoveUser = 'CALLS_STUDIO_MOBILE_REMOVE_USER',\n CallsUpdateSubscription = 'CALLS_UPDATE_SUBSCRIPTION',\n CallsDisableSubscription = 'CALLS_DISABLE_SUBSCRIPTION',\n CallsPayment = 'CALLS_PAYMENT',\n CallsRateTooltip = 'CallS_RATE_TOOLTIP',\n ChangePlan = 'CHANGE_PLAN',\n ConvertFreePlan = 'CONVERT_FREE_PLAN',\n AgentActivationStatusChange = 'AGENT_ACTIVATION_STATUS_CHANGE',\n AgentConnectionStatusChange = 'AGENT_CONNECTION_STATUS_CHANGE',\n RegexEditor = 'REGEX_EDITOR',\n Uninstall = 'UNINSTALL',\n DeleteNexmoAccount = 'DELETE_NEXMO_ACCOUNT',\n IPRestrictionGuide = 'IP_RESTRICTION_GUIDE',\n CreateDeskBot = 'CREATE_DESK_BOT',\n DeactivateDeskBot = 'DEACTIVATE_DESK_BOT',\n DeleteDeskBot = 'DELETE_DESK_BOT',\n DeskAIPromotion = 'DESK_AI_PROMOTION',\n CustomerHideTickets = 'CUSTOMER_HIDE_TICKETS',\n PreviousChat = 'PREVIOUS_CHAT',\n SSOConfig = 'SSO_CONFIG',\n DeleteDeskSendbirdMessage = 'DELETE_DESK_SENDBIRD_MESSAGE',\n SessionTimeout = 'SESSION_TIMEOUT',\n EditQuickReplyCategory = 'EDIT_QUICK_REPLY_CATEGORY',\n DeleteQuickReplyCategory = 'DELETE_QUICK_REPLY_CATEGORY',\n CheckAllRequiredFieldsFilled = 'CHECK_ALL_REQUIRED_FIELDS_FILLED',\n DeactivateExtensionApp = 'DEACTIVATE_EXTENSION_APP',\n ToggleExtensionAppStatus = 'TOGGLE_EXTENSION_APP_STATUS',\n AddFlaggedUsers = 'ADD_FLAGGED_USER',\n DeleteFlaggedUsers = 'DELETE_FLAGGED_USER',\n CreateLiveEvent = 'CREATE_LIVE_EVENT',\n UseDefaultProfanityKeywords = 'USE_DEFAULT_PROFANITY_KEYWORD',\n DownloadRecording = 'DOWNLOAD_RECORDING',\n CreateNotificationTag = 'CREATE_NOTIFICATION_TAG',\n ImportNotificationUsers = 'IMPORT_NOTIFICATION_USERS',\n AiBotEmbedding = 'AI_BOT_EMBEDDING',\n AiBotKnowledge = 'AI_BOT_KNOWLEDGE',\n AppSelector = 'APP_SELECTOR',\n AiBotSubscription = 'AI_BOT_SUBSCRIPTION',\n AiBotStudioPlugin = 'AI_BOT_STUDIO_PLUGIN',\n AiFeedback = 'AI_FEEDBACK',\n AiEmbedGuide = 'AI_EMBED_GUIDE',\n UIKitFeatureIntroduction = 'UI_KIT_FEATURE_INTRODUCTION',\n AddHostCandidate = 'ADD_HOST_CANDIDATE',\n ReleaseModeration = 'RELEASE_MODERATION',\n ChannelManager = 'CHANNEL_MANAGER',\n ExportData = 'EXPORT_DATA',\n FormGuide = 'FORM_GUIDE',\n FormPreview = 'FORM_PREVIEW',\n WhatsAppMetadata = 'WHATSAPP_METADATA',\n CopyTemplate = 'COPY_TEMPLATE',\n CopyTemplateGuide = 'COPY_TEMPLATE_GUIDE',\n PollDetail = 'POLL_DETAIL',\n TicketAssignment = 'TICKET_ASSIGNMENT',\n ModeratorGroupReassignment = 'MODERATOR_GROUP_REASSIGNMENT',\n DownloadNotificationSandboxApp = 'DOWNLOAD_NOTIFICATION_SANDBOX_APP',\n AddCustomReportCategory = 'ADD_CUSTOM_REPORT_CATEGORY',\n ReportCategoryUsage = 'REPORT_CATEGORY_USAGE',\n KeywordDetectionGroupDelete = 'KEYWORD_DETECTION_GROUP_DELETE',\n PublishTemplateVersion = 'PUBLISH_TEMPLATE_VERSION',\n PreviousTemplateVersion = 'PREVIOUS_TEMPLATE_VERSION',\n SaveTemplateChanges = 'SAVE_TEMPLATE_CHANGES',\n RestoreTemplateVersionMethod = 'RESTORE_TEMPLATE_VERSION_METHOD',\n TemplateEditInformation = 'TEMPLATE_EDIT_INFORMATION',\n TemplateEditAddChannels = 'TEMPLATE_EDIT_ADD_CHANNELS',\n TemplateEditUIKitPreset = 'TEMPLATE_EDIT_UI_KIT_PRESET',\n WhatsAppSetup = 'WHATSAPP_SETUP',\n KeywordEdit = 'KEYWORD_EDIT',\n AeroCreateUserDialog = 'AeroCreateUserDialog',\n AeroDeleteUserDialog = 'AeroDeleteUserDialog',\n AeroReactivateUserDialog = 'AeroReactivateUserDialog',\n AeroDeactivateUserDialog = 'AeroDeactivateUserDialog',\n AeroIssueUserAccessToken = 'AeroIssueUserAccessToken',\n CreateSimulate = 'CREATE_SIMULATE',\n AeroAddKnowledgeSource = 'AERO_ADD_KNOWLEDGE_SOURCE',\n BannedPhraseDialog = 'BannedPhraseDialog',\n CreateAiAgent = 'CreateAiAgent',\n AeroCreateEmailChannelDialog = 'AeroCreateEmailChannelDialog',\n}\n","import { createAction } from '@reduxjs/toolkit';\n\nexport const DialogsActions = {\n showDialog: createAction('common/dialogs/showDialog'),\n hideDialog: createAction('common/dialogs/hideDialog'),\n setIsFetching: createAction('common/dialogs/setIsFetching'),\n};\n","import { useCallback, useEffect, useRef } from 'react';\n\nimport { useDispatch } from '@/redux/hooks';\nimport { DialogsActions } from '@common/redux/actions/dialogs';\n\nfunction useShowDialog(options: ShowDialogPayload): () => void;\nfunction useShowDialog(): (payload: ShowDialogPayload) => void;\nfunction useShowDialog(options?): any {\n const dispatch = useDispatch();\n const optionsRef = useRef(options);\n\n // save options in ref to keep the reference of returned function.\n useEffect(() => {\n optionsRef.current = options;\n });\n\n return useCallback(\n (payload?: ShowDialogPayload) => {\n if (optionsRef.current) {\n dispatch(DialogsActions.showDialog(optionsRef.current));\n return;\n }\n if (payload) {\n dispatch(DialogsActions.showDialog(payload));\n }\n },\n [dispatch],\n );\n}\n\nexport default useShowDialog;\n","import { DialogType } from '@common/containers/dialogs/DialogType';\nimport type { LinkProps } from '@feather';\nimport { Link } from '@feather/components/link';\nimport { Tooltip, TooltipVariant } from '@feather/components/tooltip';\nimport useAuthorization from '@hooks/useAuthorization';\nimport useShowDialog from '@hooks/useShowDialog';\nimport useTranslationSync from '@hooks/useTranslationSync';\n\nimport messages from './translation/en.json';\n\nconst getMessages = () => messages;\n\ntype Props = LinkProps & {\n permissions: PermissionKey[];\n /**\n * If the link is within a tooltip, use `dialog` alertType since showing a tooltip over a tooltip is not recommended.\n */\n alertType?: 'tooltip' | 'dialog';\n};\n\nexport const LinkWithPermissionCheck = ({ permissions, alertType = 'tooltip', ...linkProps }: Props) => {\n const { t } = useTranslationSync(getMessages);\n const { isPermitted } = useAuthorization();\n const showPermissionDeniedDialog = useShowDialog({\n dialogTypes: DialogType.Custom,\n dialogProps: {\n size: 'small',\n title: t('dialog.title'),\n description: t('dialog.body'),\n positiveButtonProps: { text: t('dialog.btn.confirm') },\n isNegativeButtonHidden: true,\n },\n });\n\n const isAllowedToNavigate = isPermitted(permissions);\n if (isAllowedToNavigate) {\n return ;\n }\n\n if (alertType === 'tooltip') {\n return (\n \n \n \n );\n }\n return (\n {\n event.preventDefault();\n showPermissionDeniedDialog();\n }}\n />\n );\n};\n","import type { FlattenSimpleInterpolation, SimpleInterpolation } from 'styled-components';\nimport styled, { css } from 'styled-components';\n\nimport type { MakeGrid } from './types';\n\nexport const ContentContainer = styled.div`\n min-width: 1088px;\n padding: 0 32px;\n`;\n\nexport const PageContainer = styled(ContentContainer)`\n // https://github.com/styled-components/styled-components/issues/1816\n && {\n padding-top: 24px;\n }\n`;\n\nexport const TablePageContainer = styled(PageContainer)`\n display: flex;\n flex-direction: column;\n height: 100%;\n overflow: hidden;\n\n > *:not(:first-child) {\n margin-top: 16px;\n }\n\n > *:last-child {\n flex: 1;\n min-height: 0;\n }\n`;\n\nexport const CenteredPageContainer = styled(PageContainer)`\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n height: 100%;\n overflow: hidden;\n`;\n\nexport const makeGrid: MakeGrid = (options) => {\n const {\n wideWidth = 1224,\n wideGutterSize = 24,\n narrowMaxWidth = 984,\n narrowGutterSize = 20,\n columns = 12,\n } = options || {};\n\n const maxWidth = narrowMaxWidth + narrowGutterSize * 2;\n const width = wideWidth + wideGutterSize * 2;\n\n const wideGridMediaQuery = (first, ...interpolations) =>\n css`\n @media (min-width: ${width}px) {\n ${css(first, ...interpolations)}\n }\n ` as FlattenSimpleInterpolation;\n\n const ResponsiveContainer = styled.div`\n display: flex;\n flex-direction: row;\n margin: 0 auto;\n position: relative;\n width: 100%;\n min-width: 1024px;\n max-width: ${maxWidth}px;\n padding: 0 ${narrowGutterSize}px;\n\n ${wideGridMediaQuery`\n max-width: ${width}px;\n width: 100%;\n padding: 0 ${wideGutterSize}px;\n `}\n `;\n\n const ResponsiveColumn = styled.div<{\n column: number;\n includeOuterGutters?: boolean;\n styles?: SimpleInterpolation;\n }>`\n ${({ column, includeOuterGutters = false, styles }) => css`\n flex: none;\n width: calc(\n (100% + ${narrowGutterSize}px) / ${columns} * ${column} ${includeOuterGutters ? '' : ` - ${narrowGutterSize}px`}\n );\n\n ${wideGridMediaQuery`\n width: calc((100% + ${wideGutterSize}px) / ${columns} * ${column}${\n includeOuterGutters ? '' : ` - ${wideGutterSize}px`\n });\n `}\n\n && {\n ${styles}\n }\n `}\n `;\n\n return {\n ResponsiveContainer,\n wideGridMediaQuery,\n ResponsiveColumn,\n };\n};\n","import type { ReactNode } from 'react';\n\nimport startCase from 'lodash/startCase';\nimport styled from 'styled-components';\n\nimport { FeatureAvailability } from '@constants';\nimport { LinkVariant, cssVariables } from '@feather';\nimport { Button } from '@feather/components/button';\nimport * as Icons from '@feather/components/icons';\nimport { Body, Headings } from '@feather/typography';\nimport useAppId from '@hooks/useAppId';\nimport useAuthorization from '@hooks/useAuthorization';\nimport useTranslationSync from '@hooks/useTranslationSync';\nimport type { PropsOf } from '@utils';\n\nimport { LinkWithPermissionCheck } from '../LinkWithPermissionCheck';\nimport { CenteredPageContainer } from '../grid';\nimport messages from './translation/en.json';\n\nconst Container = styled.div`\n display: flex;\n flex-direction: column;\n align-items: center;\n max-width: 640px;\n`;\n\nconst Title = styled.h1`\n ${Headings['heading-05']};\n text-align: center;\n`;\n\nconst Description = styled.div`\n ${Body['body-short-01']};\n color: ${cssVariables('content-2')};\n text-align: center;\n\n & + & {\n margin-top: 12px;\n }\n\n ${Title} + & {\n margin-top: 12px;\n }\n`;\n\nconst Action = styled.div`\n padding: 24px 0;\n`;\n\ntype Props = Omit, 'permissions' | 'href' | 'useReactRouter'>;\n\nconst ApplicationSettingLink = ({ variant = LinkVariant.Inline, ...props }: Props) => {\n const appId = useAppId();\n return (\n \n );\n};\n\ntype UnavailableFeatureGuideProps = {\n description: string;\n featureName: 'Data exports' | 'Advanced analytics' | 'Announcements' | 'Moderator messages';\n availability: FeatureAvailability;\n linkToSettingRenderer?: ReactNode;\n};\n\nconst UnavailableFeatureGuide = ({\n description,\n featureName,\n availability,\n linkToSettingRenderer,\n}: UnavailableFeatureGuideProps) => {\n const { isPermitted } = useAuthorization();\n const { t } = useTranslationSync(() => messages);\n\n const isPermittedToOrganizationSettings = isPermitted(['organization.general.view', 'organization.general.all']);\n\n if (availability === FeatureAvailability.NotSupportedPlan) {\n return (\n \n \n \n \n {featureName === 'Data exports' ? t('upgradePlan.title.withoutPro') : t('upgradePlan.title.withPro')}\n \n {description}\n {t('upgradePlan.footer')}\n \n \n \n \n \n \n \n );\n }\n return (\n \n \n \n {t('featureOn.title', { featureName: startCase(featureName) })}\n {description}\n {linkToSettingRenderer ?? (\n \n {t('featureOn.description', {\n featureName: {featureName},\n a: (text) => {text},\n })}\n \n )}\n \n \n );\n};\n\nexport default UnavailableFeatureGuide;\n","import { css } from 'styled-components';\n\nimport { cssVariables } from '@feather';\n\nconst ie9UnsupportedStyles = css`\n .unsupported {\n text-align: center;\n padding: 120px 0 0 0;\n &__logo {\n img {\n width: 250px;\n }\n }\n &__header {\n font-size: 32px;\n font-weight: 300;\n padding: 40px 0;\n color: ${cssVariables('purple-7')};\n }\n &__description {\n color: ${cssVariables('neutral-6')};\n font-size: 20px;\n strong {\n color: #f45477;\n }\n }\n &__footer {\n padding: 0;\n margin-top: 60px;\n li {\n font-size: 16px;\n font-weight: 300;\n color: ${cssVariables('neutral-3')};\n display: inline-block;\n }\n &__divider {\n margin: 0 10px;\n }\n &__link {\n a {\n color: #343840;\n &:hover {\n color: #343840;\n text-decoration: underline;\n }\n }\n }\n }\n }\n`;\n\nexport default ie9UnsupportedStyles;\n","import { css } from 'styled-components';\n\nconst reactDomContainerStyles = css`\n // React DOM container styles\n body {\n position: relative;\n }\n\n #root {\n display: flex;\n flex-direction: column;\n\n position: fixed;\n z-index: 0;\n left: 0;\n top: 0;\n width: 100%;\n height: 100%;\n }\n\n #portal_popup {\n position: absolute;\n top: 0%;\n left: 0;\n width: 0;\n top: 0;\n overflow: visible;\n z-index: 80;\n }\n`;\n\nexport default reactDomContainerStyles;\n","import { css } from 'styled-components';\n\nimport { cssVariables, transitionDefault } from '@feather';\n\nconst theme = css`\n // Default link styles\n a {\n transition: color 0.2s ${transitionDefault};\n text-decoration: none;\n color: ${cssVariables('content-primary')};\n font-weight: 500;\n\n &:hover {\n color: ${cssVariables('content-primary-hover')};\n text-decoration: underline;\n }\n\n &:active {\n color: ${cssVariables('content-1')};\n }\n }\n\n // Default text selection styles\n ::selection {\n background: rgba(124, 96, 217, 1);\n color: white;\n }\n`;\n\nexport default theme;\n","import { createGlobalStyle, css, keyframes } from 'styled-components';\n\nimport { transitionDefault } from '@feather';\n\nimport ie9UnsupportedStyles from './ie9UnsupportedStyles';\nimport './preflight.css';\nimport reactDomContainerStyles from './reactDomContainerStyles';\nimport theme from './theme';\n\nconst GlobalStyles = createGlobalStyle`\n ${theme}\n ${reactDomContainerStyles}\n ${ie9UnsupportedStyles}\n`;\n\nconst clearfix = () => css`\n &::after {\n content: '';\n display: table;\n clear: both;\n }\n`;\n\nconst animationBounceDelay = () => keyframes`\n 0%, 80%, 100% {\n transform: scale(0);\n } 40% {\n transform: scale(1.0);\n }\n`;\n\nconst animationScaleY = () => keyframes`\n 0% {\n transform: scaleY(0);\n opacity: 0;\n } 100% {\n transform: scaleY(1.0);\n opacity: 1;\n }\n`;\n\nconst animationLoading = () => keyframes`\n 100% {\n transform: rotate(360deg);\n }\n`;\n\nexport {\n GlobalStyles,\n clearfix,\n // animations\n transitionDefault,\n animationBounceDelay,\n animationScaleY,\n animationLoading,\n};\n","import { useEffect } from 'react';\n\nimport * as Sentry from '@sentry/react';\nimport { BrowserTracing } from '@sentry/tracing';\nimport isMatch from 'lodash/isMatch';\n\nimport config from '@/config';\nimport { createRoutesFromChildren, matchRoutes, useLocation, useNavigationType } from '@/router';\n\nconst { SENTRY_TAGS_BRANCH, SENTRY_RELEASE, SENTRY_DIST, NODE_ENV, BUILD_MODE } = config;\n\nconst includesIgnoredFiles = (frame: { filename?: string }) => {\n const ignoredFiles = ['/gtm.js', '/bat.js', 'chrome-extension://'];\n return ignoredFiles.some((file) => frame.filename?.includes(file));\n};\n\nconst isIncludingIgnoredFile = (event: Sentry.Event) => {\n const exceptions = event.exception?.values ?? [];\n\n return exceptions.some((exception) => {\n const frames = exception.stacktrace?.frames ?? [];\n return frames.some((frame) => includesIgnoredFiles(frame));\n });\n};\n\nconst isIgnoredError = (event: Sentry.Event) => {\n return [\n /* SSO error from E2E tests */\n { extra: { response: { data: { message: 'Redirection canceled during E2E tests' } } } },\n ].some((target) => isMatch(event, target));\n};\n\n/** @knipignore */\nexport const eventProcessor = (event: Sentry.Event) => {\n try {\n // returning null will drop the event\n return isIncludingIgnoredFile(event) || isIgnoredError(event) ? null : event;\n } catch {\n return event;\n }\n};\n\nconst initializeSentry = () => {\n Sentry.init({\n dsn: 'https://048dab1986cf4d80a3a214d1ab5dca16@o31416.ingest.sentry.io/89426',\n integrations: [\n new Sentry.Integrations.Breadcrumbs({ console: true }),\n new BrowserTracing({\n routingInstrumentation: Sentry.reactRouterV6Instrumentation(\n useEffect,\n useLocation,\n useNavigationType,\n createRoutesFromChildren,\n matchRoutes,\n ),\n }),\n ],\n enabled: NODE_ENV === 'production', // set to `true` to capture exceptions in your local development environment\n environment: BUILD_MODE,\n release: SENTRY_RELEASE,\n dist: SENTRY_DIST,\n ignoreErrors: ['event_value should be a number', 'MktoForms2 is not defined', \"Can't find variable: MktoForms2\"],\n denyUrls: [\n // Facebook flakiness\n /graph\\.facebook\\.com/i,\n // Facebook blocked\n /connect\\.facebook\\.net\\/en_US\\/all\\.js/i,\n // google analytics\n /www\\.google-analytics\\.com\\/j\\/collect/i,\n /stats\\.g\\.doubleclick\\.net\\/j\\/collect/i,\n // trafficguard\n /api\\.trafficguard\\.ai/i,\n // clarity.me\n /a\\.clarity\\.ms\\/collect/i,\n /b\\.clarity\\.ms\\/collect/i,\n // hotjar\n /in\\.hotjar\\.com/i,\n // Chrome extensions\n /extensions\\//i,\n /^chrome:\\/\\//i,\n ],\n beforeBreadcrumb(breadcrumb) {\n if (breadcrumb.category !== 'xhr' && breadcrumb.category !== 'fetch') {\n return breadcrumb;\n }\n const thirdPartyBreadCrumbs =\n /(google-analytics|trafficguard|clarity|hotjar|pendo|doubleclick|heapanalytics|aptrinsic)/i;\n if (thirdPartyBreadCrumbs.test(breadcrumb.data?.url)) {\n return null;\n }\n return breadcrumb;\n },\n\n initialScope: (scope) => {\n scope.setTags({ branch: SENTRY_TAGS_BRANCH });\n scope.addEventProcessor(eventProcessor);\n return scope;\n },\n tracesSampleRate: 0.2,\n });\n};\n\nexport default initializeSentry;\n","import type { ReactNode } from 'react';\nimport { createContext, useContext, useMemo, useRef } from 'react';\n\nimport { CDN_ASSETS_PREFIX } from '@constants';\nimport { toast } from '@feather/components/notification';\nimport useAppIntl from '@hooks/useAppIntl';\nimport logException from '@utils/logException';\n\ntype Payload = {\n title?: string;\n body?: string;\n icon?: string;\n hasSound?: boolean;\n callback?: () => void;\n noAutoClose?: boolean;\n};\n\ntype Context = {\n requestPermission: () => Promise;\n show: (payload: Payload) => void;\n};\n\nconst DesktopNotificationContext = createContext({\n requestPermission: async () => false,\n show: () => {},\n});\n\ntype Props = {\n children: ReactNode;\n};\n\n// https://developer.chrome.com/blog/notifying-you-of-changes-to-notifications/#android-notifications\nexport const isDesktopNotificationSupported = () => {\n if (!('Notification' in window) || !window.Notification || !Notification.requestPermission) {\n return false;\n }\n\n if (!('constructor' in window.Notification) || typeof window.Notification.constructor !== 'function') {\n return false;\n }\n\n return true;\n};\n\nexport const isDesktopNotificationGranted = () => {\n if (isDesktopNotificationSupported()) {\n const notificationPermission = Notification.permission || Notification.prototype['permission'];\n return notificationPermission === 'granted';\n }\n return false;\n};\n\nexport const DesktopNotificationProvider = ({ children }: Props) => {\n const intl = useAppIntl();\n\n const audioRef = useRef(null);\n\n const value = useMemo(\n () => ({\n requestPermission: async () => {\n if (!isDesktopNotificationSupported()) {\n toast.warning({\n message: intl.formatMessage({ id: 'core.notification.warning.unsupported' }),\n });\n return false;\n }\n\n const notificationPermission = await new Promise((resolve) => {\n try {\n Notification.requestPermission().then(resolve);\n } catch {\n Notification.requestPermission(resolve);\n }\n });\n if (notificationPermission === 'denied') {\n toast.warning({\n message: intl.formatMessage({ id: 'core.notification.warning.denied' }),\n });\n return false;\n }\n\n return true;\n },\n show: (payload) => {\n if (!isDesktopNotificationSupported()) {\n return;\n }\n\n const {\n title = '',\n body = '',\n icon = `${CDN_ASSETS_PREFIX}/images/favicon/apple-icon-180x180.png`,\n hasSound = false,\n noAutoClose = false,\n } = payload;\n\n try {\n const notification = new Notification(title, { body, icon });\n\n notification.onclick = () => {\n try {\n window.parent.focus();\n payload.callback?.();\n } catch (error) {\n logException(error);\n }\n };\n\n if (hasSound && audioRef.current) {\n audioRef.current.muted = false;\n // TODO: Determine whether show a toast when playing the sound gets failed because of the permission\n audioRef.current.play().catch(() => {});\n }\n\n if (!noAutoClose) {\n setTimeout(() => {\n notification?.close?.();\n }, 5000);\n }\n } catch {\n /* empty */\n }\n },\n }),\n [intl],\n );\n\n return (\n \n <>\n {children}\n {/* eslint-disable-next-line jsx-a11y/media-has-caption */}\n \n \n \n );\n};\n\nexport const useDesktopNotification = () => useContext(DesktopNotificationContext);\n","import type { ReactNode } from 'react';\nimport { useEffect, useState } from 'react';\nimport { createContext, useContext, useMemo, useRef } from 'react';\n\nimport type { User } from '@sendbird/chat';\nimport { ConnectionState } from '@sendbird/chat';\nimport SendbirdChat, { ConnectionHandler, UserEventHandler } from '@sendbird/chat';\nimport { GroupChannelHandler, GroupChannelModule } from '@sendbird/chat/groupChannel';\nimport { OpenChannelHandler, OpenChannelModule } from '@sendbird/chat/openChannel';\nimport isEqual from 'lodash/isEqual';\nimport type { Observable } from 'rxjs';\nimport { Subject } from 'rxjs';\nimport { filter, map, takeUntil } from 'rxjs/operators';\n\n/**\n * HandlerParams interfaces are not exposed, while it is useful for the typing\n */\ntype ConnectionHandlerParams = Exclude[0], undefined>;\ntype GroupChannelHandlerParams = Exclude[0], undefined>;\ntype OpenChannelHandlerParams = Exclude[0], undefined>;\ntype UserEventHandlerParams = Exclude[0], undefined>;\n\ntype ConnectionHandlerKey = keyof ConnectionHandlerParams;\nexport type GroupChannelHandlerKey = keyof GroupChannelHandlerParams;\nexport type OpenChannelHandlerKey = keyof OpenChannelHandlerParams;\n/** @internal */\nexport type UserEventHandlerKey = keyof UserEventHandlerParams;\n\ntype ConnectionHandlerKeyArgsMap = {\n [key in ConnectionHandlerKey]: Parameters>;\n};\nexport type GroupChannelHandlerKeyArgsMap = {\n [key in GroupChannelHandlerKey]: Parameters>;\n};\nexport type OpenChannelHandlerKeyArgsMap = {\n [key in OpenChannelHandlerKey]: Parameters>;\n};\n/** @internal */\nexport type UserEventHandlerKeyArgsMap = {\n [key in UserEventHandlerKey]: Parameters>;\n};\n\ntype ConnectionHandlerSubject = Subject<\n [Key, ConnectionHandlerKeyArgsMap[Key]]\n>;\ntype GroupChannelHandlerSubject = Subject<\n [Key, GroupChannelHandlerKeyArgsMap[Key]]\n>;\ntype OpenChannelHandlerSubject = Subject<\n [Key, OpenChannelHandlerKeyArgsMap[Key]]\n>;\ntype UserEventHandlerSubject = Subject<\n [Key, UserEventHandlerKeyArgsMap[Key]]\n>;\n\ntype GetConnectionObservable = (\n key: Key,\n) => Observable<[Key, ConnectionHandlerKeyArgsMap[Key]]> | void;\ntype GetGroupChannelObservable = (\n key: Key,\n) => Observable<[Key, GroupChannelHandlerKeyArgsMap[Key]]> | void;\ntype GetOpenChannelObservable = (\n key: Key,\n) => Observable<[Key, OpenChannelHandlerKeyArgsMap[Key]]> | void;\ntype GetUserEventObservable = (\n key: Key,\n) => Observable<[Key, UserEventHandlerKeyArgsMap[Key]]> | void;\n\nconst CONNECTION_HANDLER_KEYS = Object.keys(new ConnectionHandler()) as ConnectionHandlerKey[];\nexport const GROUP_CHANNEL_HANDLER_KEYS = Object.keys(new GroupChannelHandler()) as GroupChannelHandlerKey[];\nexport const OPEN_CHANNEL_HANDLER_KEYS = Object.keys(new OpenChannelHandler()) as OpenChannelHandlerKey[];\nconst USER_EVENT_HANDLER_KEYS = Object.keys(new UserEventHandler()) as UserEventHandlerKey[];\n\n/** @internal */\nexport interface SendbirdChatContext {\n connect: (...args: Parameters) => Promise;\n disconnect: () => Promise;\n init: (...args: Omit, 'modules'>) => SendbirdChatInstance | void;\n instance: Readonly;\n getConnectionObservable: GetConnectionObservable;\n getGroupChannelObservable: GetGroupChannelObservable;\n getOpenChannelObservable: GetOpenChannelObservable;\n getUserEventObservable: GetUserEventObservable;\n unsubscribeAll: () => void;\n}\n\nconst SendbirdChatContext = createContext({\n connect: async () => {},\n disconnect: async () => {},\n init: () => {},\n get instance() {\n return null;\n },\n getConnectionObservable: () => {},\n getGroupChannelObservable: () => {},\n getOpenChannelObservable: () => {},\n getUserEventObservable: () => {},\n unsubscribeAll: () => {},\n});\n\ntype InstanceKey = 'app' | 'desk' | 'announcement';\n\nconst instanceMap: {\n [key in InstanceKey]?: {\n instance: SendbirdChatInstance;\n params: Omit, 'modules'>[0];\n };\n} = {};\n\ntype Props = {\n children: ReactNode;\n instanceKey: InstanceKey;\n};\n\nexport const SendbirdChatProvider = ({ children, instanceKey }: Props) => {\n const sbRef = useRef(null);\n\n const connection$Ref = useRef(new Subject());\n const groupChannel$Ref = useRef(new Subject());\n const openChannel$Ref = useRef(new Subject());\n const userEvent$Ref = useRef(new Subject());\n const unsubscribeAll$Ref = useRef>(new Subject());\n\n const value = useMemo(\n () => ({\n connect: async (...args) => {\n return (await sbRef.current?.connect(...args)) ?? undefined;\n },\n\n disconnect: async () => {\n try {\n await sbRef.current?.disconnect();\n } catch {\n // Multiple call of `disconnect` may cause accessing property of undefined\n // This catch block can be neglected\n }\n },\n\n init: (params) => {\n const oldInstance = instanceMap[instanceKey];\n if (oldInstance?.instance) {\n if (oldInstance.instance.connectionState === ConnectionState.OPEN && isEqual(oldInstance.params, params)) {\n sbRef.current = oldInstance.instance;\n return oldInstance.instance;\n }\n oldInstance.instance.disconnect().catch(() => {});\n }\n\n const instance = SendbirdChat.init({\n ...params,\n modules: [new GroupChannelModule(), new OpenChannelModule()],\n }) as SendbirdChatInstance;\n\n if (!instance) {\n return;\n }\n\n const connectionHandler = new ConnectionHandler(\n CONNECTION_HANDLER_KEYS.reduce((params, key) => {\n params[key] = (...args: ConnectionHandlerKeyArgsMap[typeof key]) => {\n connection$Ref.current.next([key, args]);\n };\n return params;\n }, {}),\n );\n\n const groupChannelHandler = new GroupChannelHandler(\n GROUP_CHANNEL_HANDLER_KEYS.reduce((params, key) => {\n params[key] = (...args: GroupChannelHandlerKeyArgsMap[typeof key]) =>\n groupChannel$Ref.current.next([key, args]);\n return params;\n }, {}),\n );\n\n const openChannelHandler = new OpenChannelHandler(\n OPEN_CHANNEL_HANDLER_KEYS.reduce((params, key: OpenChannelHandlerKey) => {\n params[key] = (...args: OpenChannelHandlerKeyArgsMap[typeof key]) =>\n openChannel$Ref.current.next([key, args]);\n return params;\n }, {}),\n );\n\n const userEventHandler = new UserEventHandler(\n USER_EVENT_HANDLER_KEYS.reduce((params, key) => {\n params[key] = (...args: UserEventHandlerKeyArgsMap[typeof key]) => userEvent$Ref.current.next([key, args]);\n return params;\n }, {}),\n );\n\n instance.addConnectionHandler('ConnectionHandler', connectionHandler);\n instance.groupChannel.addGroupChannelHandler('GroupChannelHandler', groupChannelHandler);\n instance.openChannel.addOpenChannelHandler('OpenChannelHandler', openChannelHandler);\n instance.addUserEventHandler('UserEventHandler', userEventHandler);\n\n sbRef.current = instance;\n instanceMap[instanceKey] = { instance, params };\n\n return instance;\n },\n\n get instance() {\n return sbRef.current;\n },\n\n getConnectionObservable: (key: Key) => {\n if (connection$Ref.current) {\n return connection$Ref.current.pipe(\n takeUntil(unsubscribeAll$Ref.current),\n filter<[Key, ConnectionHandlerKeyArgsMap[Key]]>(([incomingKey]) => incomingKey === key),\n );\n }\n },\n\n getGroupChannelObservable: (key: Key) => {\n if (groupChannel$Ref.current) {\n return groupChannel$Ref.current.pipe(\n takeUntil(unsubscribeAll$Ref.current),\n filter<[Key, GroupChannelHandlerKeyArgsMap[Key]]>(([incomingKey]) => incomingKey === key),\n );\n }\n },\n\n getOpenChannelObservable: (key: Key) => {\n if (openChannel$Ref.current) {\n return openChannel$Ref.current.pipe(\n takeUntil(unsubscribeAll$Ref.current),\n filter<[Key, OpenChannelHandlerKeyArgsMap[Key]]>(([incomingKey]) => incomingKey === key),\n );\n }\n },\n\n getUserEventObservable: (key: Key) => {\n if (userEvent$Ref.current) {\n return userEvent$Ref.current.pipe(\n takeUntil(unsubscribeAll$Ref.current),\n filter<[Key, UserEventHandlerKeyArgsMap[Key]]>(([incomingKey]) => incomingKey === key),\n );\n }\n },\n\n unsubscribeAll: () => {\n unsubscribeAll$Ref.current.next();\n },\n }),\n [instanceKey],\n );\n\n useEffect(() => {\n const unsubscribeAll = unsubscribeAll$Ref.current;\n return () => {\n unsubscribeAll.next();\n sbRef.current?.disconnect().catch(() => {});\n };\n }, [instanceKey]);\n\n return {children};\n};\n\nexport const useSendbirdChat = () => useContext(SendbirdChatContext);\n\nexport const useSendbirdChatConnectionObservable = (key: Key) => {\n const { instance, getConnectionObservable } = useSendbirdChat();\n const unsubscribe$Ref = useRef>(new Subject());\n\n useEffect(() => {\n const unsubscribe = unsubscribe$Ref.current;\n return () => {\n unsubscribe.next();\n };\n }, []);\n\n return useMemo(\n () =>\n instance &&\n getConnectionObservable(key)!.pipe(\n takeUntil(unsubscribe$Ref.current),\n map<[Key, ConnectionHandlerKeyArgsMap[Key]], ConnectionHandlerKeyArgsMap[Key]>(([, args]) => args),\n ),\n [getConnectionObservable, instance, key],\n );\n};\n\nexport const useSendbirdChatGroupChannelObservable = (key: Key) => {\n const { instance, getGroupChannelObservable } = useSendbirdChat();\n const unsubscribe$Ref = useRef>(new Subject());\n\n useEffect(() => {\n const unsubscribe = unsubscribe$Ref.current;\n return () => {\n unsubscribe.next();\n };\n }, []);\n\n return useMemo(\n () =>\n instance &&\n getGroupChannelObservable(key)!.pipe(\n takeUntil(unsubscribe$Ref.current),\n map<[Key, GroupChannelHandlerKeyArgsMap[Key]], GroupChannelHandlerKeyArgsMap[Key]>(([, args]) => args),\n ),\n [getGroupChannelObservable, instance, key],\n );\n};\n\nexport const useSendbirdChatOpenChannelObservable = (key: Key) => {\n const { instance, getOpenChannelObservable } = useSendbirdChat();\n const unsubscribe$Ref = useRef>(new Subject());\n\n useEffect(() => {\n const unsubscribe = unsubscribe$Ref.current;\n return () => {\n unsubscribe.next();\n };\n }, []);\n\n return useMemo(\n () =>\n instance &&\n getOpenChannelObservable(key)!.pipe(\n takeUntil(unsubscribe$Ref.current),\n map<[Key, OpenChannelHandlerKeyArgsMap[Key]], OpenChannelHandlerKeyArgsMap[Key]>(([, args]) => args),\n ),\n [getOpenChannelObservable, instance, key],\n );\n};\n\n// Can be used in the future (currently not in use)\n// export const useSendbirdChatUserEventObservable = (key: Key) => {\n// const { instance, getUserEventObservable } = useSendbirdChat();\n// const unsubscribe$Ref = useRef>(new Subject());\n\n// useEffect(() => {\n// const unsubscribe = unsubscribe$Ref.current;\n// return () => {\n// unsubscribe.next();\n// };\n// }, []);\n\n// return useMemo(\n// () =>\n// instance &&\n// getUserEventObservable(key)!.pipe(\n// takeUntil(unsubscribe$Ref.current),\n// map<[Key, UserEventHandlerKeyArgsMap[Key]], UserEventHandlerKeyArgsMap[Key]>(([, args]) => args),\n// ),\n// [getUserEventObservable, instance, key],\n// );\n// };\n\nexport const useSendbirdChatConnected = () => {\n const { instance } = useSendbirdChat();\n const [isConnected, setIsConnected] = useState(instance?.connectionState === ConnectionState.OPEN);\n\n const onConnected$ = useSendbirdChatConnectionObservable('onConnected');\n const onDisconnected$ = useSendbirdChatConnectionObservable('onDisconnected');\n const onReconnectStarted$ = useSendbirdChatConnectionObservable('onReconnectStarted');\n const onReconnectSucceeded$ = useSendbirdChatConnectionObservable('onReconnectSucceeded');\n const onReconnectFailed$ = useSendbirdChatConnectionObservable('onReconnectFailed');\n\n useEffect(() => {\n const subscriptionOnConnected = onConnected$?.subscribe(() => setIsConnected(true));\n const subscriptionOnDisconnected = onDisconnected$?.subscribe(() => setIsConnected(false));\n const subscriptionOnReconnectStarted = onReconnectStarted$?.subscribe(() => setIsConnected(false));\n const subscriptionOnReconnectSucceeded = onReconnectSucceeded$?.subscribe(() => setIsConnected(true));\n const subscriptionOnReconnectFailed = onReconnectFailed$?.subscribe(() =>\n setIsConnected(false || instance?.connectionState === ConnectionState.OPEN),\n );\n\n return () => {\n subscriptionOnConnected?.unsubscribe();\n subscriptionOnDisconnected?.unsubscribe();\n subscriptionOnReconnectStarted?.unsubscribe();\n subscriptionOnReconnectSucceeded?.unsubscribe();\n subscriptionOnReconnectFailed?.unsubscribe();\n };\n }, [\n instance?.connectionState,\n onConnected$,\n onDisconnected$,\n onReconnectFailed$,\n onReconnectStarted$,\n onReconnectSucceeded$,\n ]);\n\n useEffect(() => {\n setIsConnected(instance?.connectionState === ConnectionState.OPEN);\n }, [instance?.connectionState]);\n\n return useMemo(() => isConnected, [isConnected]);\n};\n","import { Navigate, useLocation } from 'react-router-dom';\n\nconst InvitationTokensRedirect = () => {\n const location = useLocation();\n return ;\n};\n\nexport default InvitationTokensRedirect;\n","import type { ReactNode } from 'react';\n\nimport { FormattedMessage } from 'react-intl';\n\nimport { LinkVariant } from '@feather';\nimport { EmptyState, EmptyStateSize } from '@feather/components/EmptyState';\nimport { Button } from '@feather/components/button';\nimport * as Icons from '@feather/components/icons';\nimport { Link } from '@feather/components/link';\n\ntype Props = { title?: ReactNode; description?: ReactNode; className?: string } & (\n | { action: ReactNode; onRetry: never; isRetrying: never }\n | { action?: never; onRetry?: () => void; isRetrying?: boolean }\n);\n\nexport default function ErrorState({\n title = 'Something went wrong',\n description,\n className,\n action,\n onRetry,\n isRetrying,\n}: Props) {\n return (\n \n \n contact us for support.\"\n values={{\n a: (text) => (\n \n {text}\n \n ),\n }}\n />\n )\n }\n />\n {action ?? (\n window.location.reload())}\n isLoading={isRetrying}\n icon={Icons.Refresh}\n >\n Try again\n \n )}\n \n \n );\n}\n","import ErrorState from '@ui/components/ErrorState';\n\nexport default function RouteErrorBoundary() {\n return ;\n}\n","(function() {\r\n var normalizeNonFiniteValue = function (value) {\r\n value = +value;\r\n return (isNaN(value) || value == Infinity || value == -Infinity) ? 0 : value;\r\n }\r\n \r\n var isBodyPotentiallyScrollable = function (body) {\r\n body = body ? body : document.getElementsByTagName(\"BODY\")[0];\r\n \r\n var bodyComputedStyle = window.getComputedStyle(body);\r\n var parentComputedStyle = window.getComputedStyle(body.parent);\r\n var bodyComputedOverflowX = bodyComputedStyle.overflowX;\r\n var bodyComputedOverflowY = bodyComputedStyle.overflowY;\r\n var parentComputedOverflowX = parentComputedStyle.overflowX;\r\n var parentComputedOverflowY = parentComputedStyle.overflowY;\r\n \r\n return (\r\n (\r\n bodyComputedStyle.display == \"table-column\" || \r\n bodyComputedStyle.display == \"table-column-group\"\r\n ) && (\r\n parentComputedOverflowX != \"visible\" && \r\n parentComputedOverflowX != \"clip\" && \r\n parentComputedOverflowY != \"visible\" && \r\n parentComputedOverflowY != \"clip\"\r\n ) && (\r\n bodyComputedOverflowX != \"visible\" && \r\n bodyComputedOverflowX != \"clip\" && \r\n bodyComputedOverflowY != \"visible\" && \r\n bodyComputedOverflowY != \"clip\"\r\n )\r\n );\r\n }\r\n \r\n if (!Element.prototype.scroll) {\r\n Element.prototype.scroll = function () {\r\n var argsLength = arguments.length;\r\n var doc = this.ownerDocument;\r\n var win = doc.defaultView;\r\n var quirksMode = (doc.compatMode == \"BackCompat\");\r\n var body = document.getElementsByTagName(\"BODY\")[0];\r\n var options = {};\r\n var x, y;\r\n \r\n if (doc != window.document) return;\r\n if (!win) return;\r\n \r\n if (argsLength === 0) {\r\n return;\r\n } else if (argsLength === 1) {\r\n var arg = arguments[0];\r\n if (typeof arg != \"object\") throw \"Failed to execute 'scrollBy' on 'Element': parameter 1 ('options') is not an object.\";\r\n \r\n if ('left' in arg) {\r\n options.left = normalizeNonFiniteValue(arg.left);\r\n }\r\n \r\n if ('top' in arg) {\r\n options.top = normalizeNonFiniteValue(arg.top);\r\n }\r\n \r\n x = (('left' in options) ? options.left : this.scrollLeft);\r\n y = (('top' in options) ? options.top : this.scrollTop);\r\n } else {\r\n options.left = x = normalizeNonFiniteValue(arguments[0]);\r\n options.top = y = normalizeNonFiniteValue(arguments[1]);\r\n }\r\n \r\n if (this == document.documentElement) {\r\n if (quirksMode) return;\r\n \r\n win.scroll(('scrollX' in win) ? win.scrollX : (('pageXOffset' in win) ? win.pageXOffset : this.scrollLeft), y);\r\n return;\r\n }\r\n \r\n if (this == body && quirksMode && !isBodyPotentiallyScrollable(body)) {\r\n win.scroll(options.left, options.top);\r\n return;\r\n }\r\n \r\n this.scrollLeft = x;\r\n this.scrollTop = y;\r\n };\r\n }\r\n \r\n if (!Element.prototype.scrollTo) {\r\n Element.prototype.scrollTo = Element.prototype.scroll;\r\n }\r\n \r\n if (!Element.prototype.scrollBy) {\r\n Element.prototype.scrollBy = function () {\r\n var argsLength = arguments.length;\r\n var options = {};\r\n \r\n if (argsLength === 0) {\r\n return;\r\n } else if (argsLength === 1) {\r\n var arg = arguments[0];\r\n if (typeof arg != \"object\") throw \"Failed to execute 'scrollBy' on 'Element': parameter 1 ('options') is not an object.\";\r\n \r\n if ('left' in arg) {\r\n options.left = normalizeNonFiniteValue(arg.left);\r\n }\r\n \r\n if ('top' in arg) {\r\n options.top = normalizeNonFiniteValue(arg.top);\r\n }\r\n } else {\r\n options.left = normalizeNonFiniteValue(arguments[0]);\r\n options.top = normalizeNonFiniteValue(arguments[1]);\r\n }\r\n \r\n options.left = (('left' in options) ? options.left + this.scrollLeft : this.scrollLeft);\r\n options.top = (('top' in options) ? options.top + this.scrollTop : this.scrollTop);\r\n this.scroll(options);\r\n };\r\n }\r\n})();\r\n","import type { QueryFunction } from '@tanstack/react-query';\n\nimport type { SubscriptionProduct } from '@constants';\nimport type QueryKeyPrefix from '@constants/queryKey';\n\nimport { fetchSubscriptionInfo } from './billing';\nimport { fetchApplicationMonthlyUsageWithOrgUsages } from './usage';\n\nexport const fetchApplicationMonthlyUsageWithOrgUsagesQueryFn: QueryFunction<\n ApplicationMonthlyUsageWithOrgUsage,\n [\n (typeof QueryKeyPrefix)['ApplicationMonthlyUsageWithOrgUsages'],\n { appId: string; target_month: string; fields?: string },\n ]\n> = async ({ queryKey: [, { appId, ...params }] }) => {\n const { data } = await fetchApplicationMonthlyUsageWithOrgUsages(appId, params);\n return data.data;\n};\n\nexport const fetchSubscriptionInfoQueryFn: QueryFunction<\n FetchSubscriptionInfoResponse,\n [(typeof QueryKeyPrefix)['OrgSubscriptionInfo'], { product: SubscriptionProduct }]\n> = async ({ queryKey: [, { product }] }) => {\n const { data } = await fetchSubscriptionInfo(product);\n return data;\n};\n\nexport const fetchSupportPlanSubscriptionInfoQueryFn: QueryFunction<\n FetchSubscriptionInfoResponse,\n [(typeof QueryKeyPrefix)['OrgSubscriptionInfo'], { product: SubscriptionProduct.Support }]\n> = async ({ queryKey: [, { product }] }) => {\n const { data } = await fetchSubscriptionInfo(product);\n return data;\n};\n","import { useMemo } from 'react';\n\nimport isEmpty from 'lodash/isEmpty';\n\nimport { OrganizationStatus } from '@constants';\n\nimport { useAuth } from '../redux/hooks/auth';\nimport useOrganization from './useOrganization';\n\nconst useAuthentication = () => {\n const { authenticated } = useAuth();\n const organization = useOrganization();\n const isOrganizationDeactivated = !isEmpty(organization) && organization?.status !== OrganizationStatus.Active;\n\n return useMemo(() => ({ authenticated, isOrganizationDeactivated }), [authenticated, isOrganizationDeactivated]);\n};\n\nexport default useAuthentication;\n","import type { ContextType, FC } from 'react';\nimport { createContext, useCallback, useEffect, useState } from 'react';\n\nimport is from '@sindresorhus/is';\nimport type { QueryObserverResult } from '@tanstack/react-query';\nimport { useQuery } from '@tanstack/react-query';\n\nimport { fetchSubscriptionInfoQueryFn } from '@common/api/queryFn';\nimport { SubscriptionName, SubscriptionProduct } from '@constants';\nimport QueryKeyPrefix from '@constants/queryKey';\nimport useAuthentication from '@hooks/useAuthentication';\nimport useAuthorization from '@hooks/useAuthorization';\nimport useOrganization from '@hooks/useOrganization';\n\ntype SubscriptionInfos = Record;\n\nconst initialPlanInfos = Object.values(SubscriptionProduct).reduce((infos, product) => {\n infos[product] = { current: null, future: null };\n return infos;\n}, {} as SubscriptionInfos);\n\nexport const SubscriptionInfoContext = createContext<{\n isLoading: boolean;\n isLoaded: boolean;\n subscriptions: SubscriptionInfos;\n updateSubscriptions: (payload: { product: SubscriptionProduct; info: SubscriptionInfo }) => void;\n fetchSubscriptions: () => Promise>>;\n isUnsubscribing: boolean;\n isUnsubscribed: boolean;\n isPlanChangeScheduled: boolean;\n}>({\n isLoading: false,\n isLoaded: false,\n subscriptions: initialPlanInfos,\n updateSubscriptions: () => {},\n fetchSubscriptions: () => new Promise(() => {}),\n isUnsubscribing: false,\n isUnsubscribed: false,\n isPlanChangeScheduled: false,\n});\n\nexport const SubscriptionInfoContextProvider: FC<{ children: React.ReactNode }> = ({ children }) => {\n const [subscriptions, setSubscriptions] = useState(initialPlanInfos);\n const organization = useOrganization();\n\n const { authenticated } = useAuthentication();\n const { isPermitted } = useAuthorization();\n const updateSubscriptions: ContextType['updateSubscriptions'] = useCallback(\n ({ product, info }) => {\n setSubscriptions({ ...subscriptions, [product]: info });\n },\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [],\n );\n\n const hasOrganizationGeneralPermission = isPermitted(['organization.general.all', 'organization.general.view']);\n\n const {\n data: subscriptionInfo,\n isLoading,\n status,\n refetch: fetchSubscriptions,\n } = useQuery({\n queryKey: [QueryKeyPrefix.OrgSubscriptionInfo, { product: SubscriptionProduct.Chat }],\n queryFn: fetchSubscriptionInfoQueryFn,\n enabled: authenticated && hasOrganizationGeneralPermission && is.nonEmptyObject(organization),\n });\n\n const { current_subscription: current, future_subscription: future } = subscriptionInfo ?? {\n current_subscription: null,\n future_subscription: null,\n };\n\n useEffect(() => {\n if (subscriptionInfo) {\n updateSubscriptions({\n product:\n subscriptionInfo.future_subscription?.product ||\n subscriptionInfo.current_subscription?.product ||\n SubscriptionProduct.Chat,\n info: {\n current: subscriptionInfo.current_subscription,\n future: subscriptionInfo.future_subscription,\n },\n });\n }\n }, [authenticated, subscriptionInfo, updateSubscriptions]);\n\n const isCurrentFreePlan =\n current != null && [SubscriptionName.FreeTrial, SubscriptionName.Free].includes(current.subscription_name);\n const isCurrentPlanEnding = current != null && typeof current.end_date === 'string';\n const isFuturePlanExist = future != null;\n const isUnsubscribing = isCurrentPlanEnding && !isCurrentFreePlan && !isFuturePlanExist;\n const isUnsubscribed = current == null && status === 'success';\n const isPlanChangeScheduled = (!isCurrentFreePlan && isCurrentPlanEnding) || isFuturePlanExist;\n\n return (\n \n {children}\n \n );\n};\n","import { createContext } from 'react';\n\nimport is from '@sindresorhus/is';\nimport type { QueryObserverBaseResult } from '@tanstack/react-query';\nimport { useQuery } from '@tanstack/react-query';\n\nimport { useAuth } from '@/redux/hooks/auth';\nimport { fetchSupportPlanSubscriptionInfoQueryFn } from '@common/api/queryFn';\nimport { SubscriptionProduct } from '@constants';\nimport QueryKeyPrefix from '@constants/queryKey';\nimport useOrganization from '@hooks/useOrganization';\n\ntype SupportPlanContextType = {\n isLoading: boolean;\n isLoaded: boolean;\n current: SupportPlanSubscription | null;\n future: SupportPlanSubscription | null;\n refetch: QueryObserverBaseResult['refetch'];\n};\n\nexport const SupportPlanContext = createContext({\n isLoading: false,\n isLoaded: false,\n current: null,\n future: null,\n refetch: () => new Promise(() => {}),\n});\n\nexport const SupportPlanContextProvider = ({ children }) => {\n const { authenticated } = useAuth();\n const organization = useOrganization();\n\n const {\n data: subscriptions,\n isLoading,\n isFetched,\n refetch,\n } = useQuery({\n queryKey: [QueryKeyPrefix.OrgSubscriptionInfo, { product: SubscriptionProduct.Support }],\n queryFn: fetchSupportPlanSubscriptionInfoQueryFn,\n enabled: authenticated && is.nonEmptyObject(organization),\n });\n\n return (\n \n {children}\n \n );\n};\n","import type { RootState } from '@/store';\n\nimport { useSelector } from '.';\n\ntype LocalState = RootState['imagePreview'];\ntype LocalSelector = (state: LocalState) => T;\n\nexport function useImagePreview(): LocalState;\nexport function useImagePreview(selector: LocalSelector): T;\n\nexport function useImagePreview(selector?: LocalSelector, equalityFn?: (left: T, right: T) => boolean) {\n return useSelector(\n (state) => (selector ? selector(state.imagePreview) : (state.imagePreview as LocalState)),\n equalityFn,\n );\n}\n","import { useEffect } from 'react';\n\nimport * as Sentry from '@sentry/react';\n\nimport useAppId from '@hooks/useAppId';\n\nconst useSentryApplicationTracker = () => {\n const appId = useAppId();\n\n useEffect(() => {\n if (!appId) return;\n\n Sentry.setTag('appId', appId);\n\n return () => {\n Sentry.setTag('appId', null);\n };\n }, [appId]);\n};\n\nexport default useSentryApplicationTracker;\n","import { useAuth } from '@/redux/hooks/auth';\nimport type { RootState } from '@/store';\n\ntype LocalState = RootState['auth']['user'];\ntype LocalSelector = (state: LocalState) => T;\n\nfunction useUser(): LocalState;\nfunction useUser(selector: LocalSelector): T;\n\nfunction useUser(selector?: LocalSelector) {\n return useAuth((state) => (selector ? selector(state.user) : state.user));\n}\n\nexport default useUser;\n","import { useEffect } from 'react';\n\nimport * as Sentry from '@sentry/react';\n\nimport useUser from '@hooks/useUser';\n\nconst useSentryUserTracker = () => {\n const user = useUser();\n\n useEffect(() => {\n if (!user.user_id) return;\n\n Sentry.setUser({ id: String(user.user_id) });\n\n return () => {\n Sentry.setUser(null);\n };\n }, [user]);\n};\n\nexport default useSentryUserTracker;\n","import { axios, getGateURL } from '@api/shared';\n\nimport type {\n CustomItems,\n DeletedRoom,\n GetDirectCallDataExportsAPI,\n GetDirectCallsReportsAPI,\n OpenRoom,\n Participant,\n PostDirectCallDataExportsAPI,\n QueryParamsOnSever,\n Room,\n RoomType,\n UserSummary,\n} from './types';\n\nexport const getDirectCalls: GetDirectCallsAPI = (appId, params) => {\n return axios.get(`${getGateURL()}/dashboard_api/v2oip/direct_calls`, {\n params,\n headers: {\n 'App-Id': appId,\n },\n });\n};\n\nexport const getDirectCall: GetDirectCallAPI = (appId, { call_id }) => {\n return axios.get(`${getGateURL()}/dashboard_api/v2oip/direct_calls/${call_id}`, {\n headers: {\n 'App-Id': appId,\n },\n });\n};\n\nexport const getDirectCallDataExports: GetDirectCallDataExportsAPI = (appId, params) => {\n return axios.get(`${getGateURL()}/dashboard_api/v2oip/direct_calls/export-call-history`, {\n params,\n headers: {\n 'App-Id': appId,\n },\n });\n};\n\nexport const getDirectCallsReports: GetDirectCallsReportsAPI = (appId, params) => {\n return axios.get(`${getGateURL()}/dashboard_api/v2oip/direct_calls/performance-report`, {\n params,\n headers: {\n 'App-Id': appId,\n },\n });\n};\n\nexport const createDirectCallDataExports: PostDirectCallDataExportsAPI = (appId, payload) => {\n return axios.post(`${getGateURL()}/dashboard_api/v2oip/direct_calls/export-call-history`, payload, {\n headers: {\n 'App-Id': appId,\n },\n });\n};\n\nexport const fetchCallStats = (appId: string, call_id: string) => {\n return axios.get(`${getGateURL()}/dashboard_api/v2oip/direct_calls/${call_id}/stats`, {\n headers: { 'App-Id': appId },\n });\n};\n\nexport const fetchUserSummary = (appId: string, userId: string) => {\n return axios.get(\n `${getGateURL()}/dashboard_api/v2oip/users/${encodeURIComponent(userId)}/call_summary`,\n { headers: { 'App-Id': appId } },\n );\n};\n\nexport type FetchRoomsResponse = {\n rooms: Room[];\n next: string | null | undefined;\n prev: string | null | undefined;\n};\n\nexport const fetchRooms = (appId: string, params?: QueryParamsOnSever) => {\n return axios.get(`${getGateURL()}/dashboard_api/v2oip/rooms`, {\n params,\n headers: { 'App-Id': appId },\n });\n};\n\nexport const fetchRoom = (\n appId: string,\n roomId: string,\n params?: Omit,\n) => {\n return axios.get<{ room: Room }>(`${getGateURL()}/dashboard_api/v2oip/rooms/${roomId}`, {\n params,\n headers: { 'App-Id': appId },\n });\n};\n\nexport const createRoom = (appId: string, payload: { type: RoomType; custom_items?: CustomItems }) => {\n return axios.post<{ room: OpenRoom }>(`${getGateURL()}/dashboard_api/v2oip/rooms`, payload, {\n headers: { 'App-Id': appId },\n });\n};\n\nexport const deleteRoom = (appId: string, roomId: string) => {\n return axios.delete<{ room: DeletedRoom }>(`${getGateURL()}/dashboard_api/v2oip/rooms/${roomId}`, {\n headers: { 'App-Id': appId },\n });\n};\n\nexport const editCustomItems = (\n appId: string,\n roomId: string,\n payload: { custom_items: CustomItems; mode?: 'upsert' | 'insert' },\n) => {\n return axios.put<{ custom_items: CustomItems }>(\n `${getGateURL()}/dashboard_api/v2oip/rooms/${roomId}/custom_items`,\n payload,\n { headers: { 'App-Id': appId } },\n );\n};\n\nexport const deleteCustomItems = (appId: string, roomId: string, payload: { keys?: string[] }) => {\n return axios.delete<{ custom_items: CustomItems }>(\n `${getGateURL()}/dashboard_api/v2oip/rooms/${roomId}/custom_items`,\n {\n headers: { 'App-Id': appId },\n data: payload,\n },\n );\n};\n\nexport const fetchParticipants = (\n appId: string,\n roomId: string,\n params?: { next?: string; prev?: string; limit?: number },\n) => {\n return axios.get<{ participants: Participant[]; next: string | null; prev: string | null }>(\n `${getGateURL()}/dashboard_api/v2oip/rooms/${roomId}/participants`,\n { params, headers: { 'App-Id': appId } },\n );\n};\n\nexport type WebhookSetting = {\n enabled_events: WebhookEvent[];\n url: string;\n enabled: boolean;\n};\n\nexport const fetchWebhookSetting = (appId: string, params?: { display_all_webhook_categories?: boolean }) => {\n return axios.get<{ webhook: WebhookSetting & { all_webhook_categories: WebhookEvent[] } }>(\n `${getGateURL()}/dashboard_api/v2oip/applications/${appId}/settings/webhook`,\n { headers: { 'App-Id': appId }, params },\n );\n};\n\nexport const updateWebhookSetting = (appId: string, payload: Partial) => {\n return axios.put<{ webhook: WebhookSetting }>(\n `${getGateURL()}/dashboard_api/v2oip/applications/${appId}/settings/webhook`,\n payload,\n { headers: { 'App-Id': appId } },\n );\n};\n\ntype CallsSettings = {\n general: {\n relay_method: RelayMethod;\n direct_call_cloud_recording_enabled: boolean;\n group_call_cloud_recording_enabled: boolean;\n };\n};\n\nexport const fetchCallsSettings = ({ appId }: { appId: string }) => {\n return axios.get(`${getGateURL()}/dashboard_api/v2oip/applications/${appId}/settings/general`, {\n headers: { 'App-Id': appId },\n });\n};\n\nexport type UpdateCallsSettingsPayload = {\n relay_method?: RelayMethod;\n group_call_cloud_recording_enabled?: boolean;\n direct_call_cloud_recording_enabled?: boolean;\n direct_call_recording_video?: 'dual' | 'callee';\n direct_call_recording_display_timestamp?: boolean;\n direct_call_recording_timestamp_timezone?: string;\n};\n\nexport const updateCallsSettings = (appId: string, payload: UpdateCallsSettingsPayload) => {\n return axios.put<{ general: { relay_method: RelayMethod } }>(\n `${getGateURL()}/dashboard_api/v2oip/applications/${appId}/settings/general`,\n payload,\n { headers: { 'App-Id': appId } },\n );\n};\n\nexport const createFreeVoucher = (appId: string) => {\n return axios.post(\n `${getGateURL()}/dashboard_api/billing/vouchers/start_free_trial`,\n {},\n { headers: { 'App-Id': appId } },\n );\n};\n\nexport type ChatIntegrationEvent = 'direct_call:dial' | 'direct_call:end';\n\nexport type ChatIntegrationSetting = {\n enabled: boolean;\n enabled_events: ChatIntegrationEvent[];\n all_chat_integration_categories: ChatIntegrationEvent[];\n};\n\nexport const fetchChatIntegration = (\n appId: string,\n params: { display_all_chat_integration_categories: boolean } = { display_all_chat_integration_categories: true },\n) => {\n return axios.get<{ chat_integration: ChatIntegrationSetting }>(\n `${getGateURL()}/dashboard_api/v2oip/applications/${appId}/settings/chat_integration`,\n { params, headers: { 'App-Id': appId } },\n );\n};\n\nexport const updateChatIntegration = (\n appId: string,\n payload: { enabled: boolean; enabled_events: ChatIntegrationEvent[] },\n) => {\n return axios.put<{ chat_integration: ChatIntegrationSetting }>(\n `${getGateURL()}/dashboard_api/v2oip/applications/${appId}/settings/chat_integration`,\n payload,\n { headers: { 'App-Id': appId } },\n );\n};\n","import { createFreeVoucher } from '@calls/api';\nimport * as commonBillingApi from '@common/api/billing';\n\n/**\n * check existence of a voucher for this organization and if no voucher has been issued, issue a free voucher.\n */\nexport const requestFreeVoucher = async (appId: string) => {\n const { data } = await commonBillingApi.fetchVouchers({ limit: 1 });\n const shouldIssueFreeVoucher = data.count === 0;\n\n if (shouldIssueFreeVoucher) {\n await createFreeVoucher(appId);\n return { isFreeVoucherIssued: true };\n }\n\n return { isFreeVoucherIssued: false };\n};\n\n/**\n * voucher purchase process:\n * make a payment\n * → (optional - if there are no active voucher) activate voucher\n * → enable same subscription with voucher purchase\n */\nconst processVoucherPayment = async (voucherUid: string) => {\n const purchased = await commonBillingApi.purchaseVoucher(voucherUid);\n\n const processActivation = async () => {\n const { data } = await commonBillingApi.fetchVouchers({ status: 'ACTIVE', limit: 1 });\n const hasActiveVoucher = data.count > 0;\n\n return hasActiveVoucher ? purchased : commonBillingApi.activateVoucher(voucherUid);\n };\n\n const processSubscription = async () => {\n const { credit, paid_amount, duration_days } = purchased.data;\n\n const response = await commonBillingApi.updateVoucherSubscription({\n voucher_subscription_credit: credit,\n voucher_subscription_payment_amount: paid_amount,\n voucher_subscription_duration_days: duration_days,\n });\n\n return response;\n };\n\n const [{ data: voucher }, { data: subscription }] = await Promise.all([processActivation(), processSubscription()]);\n\n return { voucher, subscription };\n};\n\nexport const purchaseVoucher = async (params: { credits: number; price: number; duration: number }) => {\n const { credits, price, duration } = params;\n const priceInCents = Math.round(price * 100);\n\n const { data: voucher } = await commonBillingApi.createVoucher({\n credit: credits,\n paid_amount: priceInCents,\n duration_days: duration,\n });\n\n return processVoucherPayment(voucher.uid);\n};\n\ntype NextVoucher = {\n voucher: Voucher | null;\n invoice: Invoice | null;\n};\nexport const fetchNextVoucher = async (): Promise => {\n const { data: vouchersResponse } = await commonBillingApi.fetchVouchers({\n status: 'READY',\n ordering: '-created_at',\n limit: 1,\n });\n const [nextVoucher] = vouchersResponse.results;\n\n if (!nextVoucher) {\n return { voucher: null, invoice: null };\n }\n\n const { data: invoiceResponse } = await commonBillingApi.fetchInvoices({\n limit: 1,\n offset: 0,\n voucher__isnull: false,\n voucher_uid: nextVoucher.uid,\n });\n const [invoice = null] = invoiceResponse.results;\n\n return { voucher: nextVoucher, invoice };\n};\n\nexport const purchaseFailedVoucher = processVoucherPayment;\n","import logException from '@utils/logException';\n\nconst getErrorMessage = (error: any, fallbackMessage: string = 'Something went wrong. Please try again.'): string => {\n /**\n * FIXME:\n * The return of Empty string when there is no error is a temporary solution.\n * let's fix this to return `null` value and refactor all of its dependency.\n */\n if (!error) return '';\n\n let errorMessage;\n const status = error?.response?.status;\n const data = error?.response?.data;\n\n if (typeof error === 'string') {\n errorMessage = error;\n } else if (status && (String(status).startsWith('4') || String(status).startsWith('5')) && data) {\n errorMessage = data.message || data.detail || data.error?.message;\n } else if (data?.message) {\n errorMessage = data.message;\n } else if (error?.message) {\n errorMessage = error.message;\n } else {\n logException(new Error('Unclassified error type in getBadRequestNotificationAction'), {\n reason: 'Unclassified error in getErrorMessage',\n context: { error },\n });\n }\n\n return errorMessage || fallbackMessage;\n};\n\nexport default getErrorMessage;\n","import { useEffect, useRef } from 'react';\n\nimport type { ToastOption } from '@feather';\nimport { toast } from '@feather/components/notification';\nimport getErrorMessage from '@utils/getErrorMessage';\n\nconst useErrorToast = (\n error: any,\n options?: { ignoreDuplicates?: boolean; type?: 'warning' } & Partial,\n) => {\n const { ignoreDuplicates = false, ...toastOptions } = options || {};\n const toastOptionRef = useRef(toastOptions); // prevent calling `useEffect` multiple times\n const errorMessage = error && getErrorMessage(error);\n\n useEffect(() => {\n if (!ignoreDuplicates) {\n return;\n }\n if (errorMessage) {\n if (toastOptionRef.current.type === 'warning') {\n toast.warning({ message: errorMessage, ...toastOptionRef.current });\n return;\n }\n toast.error({ message: errorMessage, ...toastOptionRef.current });\n }\n }, [errorMessage, ignoreDuplicates]);\n\n useEffect(() => {\n if (ignoreDuplicates) {\n return;\n }\n if (error) {\n if (toastOptionRef.current.type === 'warning') {\n toast.warning({ message: getErrorMessage(error), ...toastOptionRef.current });\n return;\n }\n toast.error({ message: getErrorMessage(error), ...toastOptionRef.current });\n }\n }, [error, ignoreDuplicates]);\n};\n\nexport default useErrorToast;\n","import type { FC, ReactNode } from 'react';\nimport { createContext, useCallback, useContext, useEffect, useMemo, useState } from 'react';\n\nimport differenceInMonths from 'date-fns/differenceInMonths';\nimport isPast from 'date-fns/isPast';\n\nimport * as services from '@calls/services';\nimport {\n deleteVoucherSubscription,\n fetchVoucherSubscription,\n fetchVouchers as fetchVouchersApi,\n updateVoucherSubscription,\n} from '@common/api/billing';\nimport useAsync from '@hooks/useAsync';\nimport useErrorToast from '@hooks/useErrorToast';\n\nexport enum SubscriptionStatus {\n ON,\n OFF,\n PAYMENT_DECLINED,\n}\nexport enum UsageStatus {\n Normal = 'normal',\n Warn = 'warn',\n Error = 'error',\n}\n\nconst useAsyncSubscription = () => {\n const [fetchState, fetch] = useAsync(fetchVoucherSubscription, []);\n const [updateState, update] = useAsync(updateVoucherSubscription, []);\n const [removeState, remove] = useAsync(deleteVoucherSubscription, []);\n const [state, setState] = useState(fetchState);\n\n /* sync latest async state when promise of fetch, update or remove is resolved */\n useEffect(() => {\n if (fetchState) {\n setState(fetchState);\n }\n }, [fetchState]);\n\n useEffect(() => {\n if (updateState) {\n setState(updateState);\n }\n }, [updateState]);\n\n useEffect(() => {\n if (removeState) {\n setState(removeState);\n }\n }, [removeState]);\n\n return [state, { fetch, update, remove }] as const;\n};\n\n/* hook to store async data related to Calls usage */\nconst useCallsVoucherProvider = () => {\n const [vouchersState, fetchVouchers] = useAsync(fetchVouchersApi, []);\n const [nextVoucherState, fetchNextVoucher] = useAsync(services.fetchNextVoucher, []);\n const [updatedAt, setUpdatedAt] = useState(null);\n\n const [subscriptionState, { fetch: fetchSubscription, update: updateSubscription, remove: removeSubscription }] =\n useAsyncSubscription();\n\n useEffect(() => {\n setUpdatedAt(Date.now());\n }, [subscriptionState]);\n\n return {\n vouchers: {\n loading: vouchersState.status === 'loading',\n error: vouchersState.error ?? null,\n response: vouchersState.data,\n },\n nextVoucher: {\n loading: nextVoucherState.status === 'loading',\n error: nextVoucherState.error ?? null,\n response: nextVoucherState.data,\n },\n subscription: {\n loading: subscriptionState.status === 'loading',\n error: subscriptionState.error ?? null,\n response: subscriptionState.data,\n },\n fetchVouchers,\n fetchNextVoucher,\n fetchSubscription,\n updateSubscription,\n removeSubscription,\n updatedAt,\n };\n};\n\ntype CallsVoucherContext = ReturnType;\n\n/** @knipignore */\nexport const CallsVoucherContext = createContext({\n vouchers: { loading: false, error: null, response: undefined },\n fetchVouchers: fetchVouchersApi,\n\n nextVoucher: { loading: false, error: null, response: undefined },\n fetchNextVoucher: services.fetchNextVoucher,\n\n subscription: { loading: false, error: null, response: undefined },\n fetchSubscription: fetchVoucherSubscription,\n updateSubscription: updateVoucherSubscription,\n removeSubscription: deleteVoucherSubscription,\n updatedAt: null,\n});\n\nexport const CallsVoucherProvider: FC<{ children: ReactNode }> = ({ children }) => {\n return {children};\n};\n\nexport const useCallsVoucher = () => useContext(CallsVoucherContext);\n\nconst processVoucher = (voucher: Voucher & { invoice?: null | Invoice }) => {\n const { credit, transferred_credit, used_credit, expire_dt, invoice = null, paid_amount: price } = voucher;\n\n const quota = Math.max(credit, credit + transferred_credit);\n const usage = Math.max(0, used_credit);\n const balance = quota - usage;\n const usageRate = usage / quota;\n\n const expireAt = expire_dt ?? undefined;\n\n return { credit, transferred_credit, used_credit, quota, usage, balance, expireAt, usageRate, invoice, price };\n};\n\nconst isActive = (voucher: Voucher) => voucher.status === 'ACTIVE';\nconst isReserved = (voucher: Voucher) => voucher.status === 'READY';\n\nexport const useLatestVoucher = () => {\n const {\n vouchers: { response },\n } = useCallsVoucher();\n\n const latestVoucher = useMemo(() => {\n const vouchers = response?.data.results;\n const activeVoucher = vouchers?.find((voucher) => isActive(voucher));\n const endedVoucher = vouchers?.find((voucher) => !isReserved(voucher));\n const latest = activeVoucher ?? endedVoucher;\n\n return latest ? processVoucher(latest) : null;\n }, [response]);\n\n return latestVoucher;\n};\n\nexport const useNextVoucher = () => {\n const {\n nextVoucher: { response },\n } = useCallsVoucher();\n\n const nextVoucher = useMemo(() => {\n return response?.voucher ? { ...processVoucher(response.voucher), invoice: response.invoice } : null;\n }, [response]);\n\n return nextVoucher;\n};\n\nexport const useSubscription = () => {\n const { subscription: subscriptionState, nextVoucher: nextVoucherState } = useCallsVoucher();\n\n const subscription = subscriptionState.response?.data;\n const nextVoucherResponse = nextVoucherState.response;\n\n const status = useMemo(() => {\n if (!subscription || !nextVoucherResponse) {\n return null;\n }\n if (nextVoucherResponse.invoice?.status === 'FAILED') {\n return SubscriptionStatus.PAYMENT_DECLINED;\n }\n /* when it have no VoucherSubscription, subscription's all properties are null */\n if (subscription.voucher_subscription_credit === null) {\n return SubscriptionStatus.OFF;\n }\n\n return SubscriptionStatus.ON;\n }, [nextVoucherResponse, subscription]);\n\n return !subscription || status === null\n ? null\n : {\n status,\n credits: subscription.voucher_subscription_credit,\n amount: subscription.voucher_subscription_payment_amount,\n durationDays: subscription.voucher_subscription_duration_days,\n };\n};\n\nexport const useVoucherLoader = (\n options: { vouchers?: boolean; subscription?: boolean; nextVoucher?: boolean } = {\n vouchers: true,\n subscription: true,\n nextVoucher: true,\n },\n) => {\n const { vouchers, subscription, nextVoucher } = options;\n const {\n vouchers: { error: vouchersError },\n nextVoucher: { error: nextVoucherError },\n subscription: { error: subscriptionError },\n fetchVouchers,\n fetchSubscription,\n fetchNextVoucher,\n } = useCallsVoucher();\n\n useEffect(() => {\n vouchers && fetchVouchers();\n }, [fetchVouchers, vouchers]);\n\n useEffect(() => {\n subscription && fetchSubscription();\n }, [fetchSubscription, subscription]);\n\n useEffect(() => {\n nextVoucher && fetchNextVoucher();\n }, [fetchNextVoucher, nextVoucher]);\n\n useErrorToast(vouchersError);\n useErrorToast(subscriptionError);\n useErrorToast(nextVoucherError);\n const loadAll = useCallback(() => {\n Promise.all([fetchVouchers(), fetchSubscription(), fetchNextVoucher()]);\n }, [fetchNextVoucher, fetchSubscription, fetchVouchers]);\n\n return { loadAll };\n};\n\nexport const useVoucherError = () => {\n const { vouchers, subscription, nextVoucher } = useCallsVoucher();\n return vouchers.error || subscription.error || nextVoucher.error;\n};\n\nexport const isActivatable = (voucher: ReturnType) =>\n voucher?.invoice?.status === 'PAID' || voucher?.price === 0;\n\nconst isReady = (nextVoucher: ReturnType, status: SubscriptionStatus) =>\n isActivatable(nextVoucher) || status === SubscriptionStatus.ON;\n\n/**\n * return latest voucher's expiration status\n */\nexport const useVoucherExpirationStatus = () => {\n const EXPIRED_WARNING_MONTH = 1;\n const voucher = useLatestVoucher();\n const nextVoucher = useNextVoucher();\n const subscription = useSubscription();\n\n if (!voucher || !subscription) return null;\n\n const ready = isReady(nextVoucher, subscription.status);\n const expireAt = voucher.expireAt ? new Date(voucher.expireAt) : null;\n\n if (expireAt && isPast(expireAt)) {\n return UsageStatus.Error;\n }\n\n if (!ready && expireAt && differenceInMonths(expireAt, Date.now()) < EXPIRED_WARNING_MONTH) {\n return UsageStatus.Warn;\n }\n\n return UsageStatus.Normal;\n};\n\n/**\n * return latest voucher's depletion status\n */\nexport const useVoucherDepletionStatus = () => {\n const DEPLETED_WARNING_RATE = 0.8;\n const voucher = useLatestVoucher();\n const nextVoucher = useNextVoucher();\n const subscription = useSubscription();\n\n if (!voucher || !subscription) return null;\n\n const ready = isReady(nextVoucher, subscription.status);\n const { usageRate } = voucher;\n\n if (usageRate >= 1) {\n return UsageStatus.Error;\n }\n if (!ready && usageRate >= DEPLETED_WARNING_RATE) {\n return UsageStatus.Warn;\n }\n\n return UsageStatus.Normal;\n};\n\nexport const useVoucherAlert = () => {\n const expirationStatus = useVoucherExpirationStatus();\n const depletionStatus = useVoucherDepletionStatus();\n\n return [expirationStatus, depletionStatus].some((status) => status !== UsageStatus.Normal);\n};\n","import type { FC, ReactNode } from 'react';\nimport { createContext, useMemo, useState } from 'react';\n\nexport const FullScreenModalContext = createContext<{\n activeModalID: string | null;\n openModal: (id: string) => void;\n closeModal: (id?: string) => void;\n}>({\n activeModalID: null,\n openModal: () => {},\n closeModal: () => {},\n});\n\nexport const FullScreenModalContextProvider: FC<{ children: ReactNode }> = ({ children }) => {\n const [activeModalID, setActiveModalID] = useState(null);\n\n return (\n {\n const closeModal = (id?: string) => {\n if (!id || id === activeModalID) {\n setActiveModalID(null);\n }\n };\n\n return {\n activeModalID,\n openModal: setActiveModalID,\n closeModal,\n };\n }, [activeModalID])}\n >\n {children}\n \n );\n};\n","import { Suspense, lazy, useContext } from 'react';\n\nimport { FullScreenModalIDs } from '@constants';\nimport { FullScreenModalContext } from '@ui/components/FullScreenModal/context';\n\nconst CallsVoucherModal = lazy(() => import('./CallsVoucherModal'));\n\nconst modals = {\n [FullScreenModalIDs.CallsVoucher]: CallsVoucherModal,\n};\n\nexport const FullScreenModals = () => {\n const { activeModalID } = useContext(FullScreenModalContext);\n if (activeModalID && Object.keys(modals).includes(activeModalID)) {\n const Component = modals[activeModalID];\n return (\n \n \n \n );\n }\n return null;\n};\n","import _inheritsLoose from '@babel/runtime/helpers/esm/inheritsLoose';\nimport * as React from 'react';\n\nvar changedArray = function changedArray(a, b) {\n if (a === void 0) {\n a = [];\n }\n\n if (b === void 0) {\n b = [];\n }\n\n return a.length !== b.length || a.some(function (item, index) {\n return !Object.is(item, b[index]);\n });\n};\n\nvar initialState = {\n error: null\n};\n\nvar ErrorBoundary = /*#__PURE__*/function (_React$Component) {\n _inheritsLoose(ErrorBoundary, _React$Component);\n\n function ErrorBoundary() {\n var _this;\n\n for (var _len = arguments.length, _args = new Array(_len), _key = 0; _key < _len; _key++) {\n _args[_key] = arguments[_key];\n }\n\n _this = _React$Component.call.apply(_React$Component, [this].concat(_args)) || this;\n _this.state = initialState;\n\n _this.resetErrorBoundary = function () {\n var _this$props;\n\n for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n args[_key2] = arguments[_key2];\n }\n\n _this.props.onReset == null ? void 0 : (_this$props = _this.props).onReset.apply(_this$props, args);\n\n _this.reset();\n };\n\n return _this;\n }\n\n ErrorBoundary.getDerivedStateFromError = function getDerivedStateFromError(error) {\n return {\n error: error\n };\n };\n\n var _proto = ErrorBoundary.prototype;\n\n _proto.reset = function reset() {\n this.setState(initialState);\n };\n\n _proto.componentDidCatch = function componentDidCatch(error, info) {\n var _this$props$onError, _this$props2;\n\n (_this$props$onError = (_this$props2 = this.props).onError) == null ? void 0 : _this$props$onError.call(_this$props2, error, info);\n };\n\n _proto.componentDidUpdate = function componentDidUpdate(prevProps, prevState) {\n var error = this.state.error;\n var resetKeys = this.props.resetKeys; // There's an edge case where if the thing that triggered the error\n // happens to *also* be in the resetKeys array, we'd end up resetting\n // the error boundary immediately. This would likely trigger a second\n // error to be thrown.\n // So we make sure that we don't check the resetKeys on the first call\n // of cDU after the error is set\n\n if (error !== null && prevState.error !== null && changedArray(prevProps.resetKeys, resetKeys)) {\n var _this$props$onResetKe, _this$props3;\n\n (_this$props$onResetKe = (_this$props3 = this.props).onResetKeysChange) == null ? void 0 : _this$props$onResetKe.call(_this$props3, prevProps.resetKeys, resetKeys);\n this.reset();\n }\n };\n\n _proto.render = function render() {\n var error = this.state.error;\n var _this$props4 = this.props,\n fallbackRender = _this$props4.fallbackRender,\n FallbackComponent = _this$props4.FallbackComponent,\n fallback = _this$props4.fallback;\n\n if (error !== null) {\n var _props = {\n error: error,\n resetErrorBoundary: this.resetErrorBoundary\n };\n\n if ( /*#__PURE__*/React.isValidElement(fallback)) {\n return fallback;\n } else if (typeof fallbackRender === 'function') {\n return fallbackRender(_props);\n } else if (FallbackComponent) {\n return /*#__PURE__*/React.createElement(FallbackComponent, _props);\n } else {\n throw new Error('react-error-boundary requires either a fallback, fallbackRender, or FallbackComponent prop');\n }\n }\n\n return this.props.children;\n };\n\n return ErrorBoundary;\n}(React.Component);\n\nfunction withErrorBoundary(Component, errorBoundaryProps) {\n var Wrapped = function Wrapped(props) {\n return /*#__PURE__*/React.createElement(ErrorBoundary, errorBoundaryProps, /*#__PURE__*/React.createElement(Component, props));\n }; // Format for display in DevTools\n\n\n var name = Component.displayName || Component.name || 'Unknown';\n Wrapped.displayName = \"withErrorBoundary(\" + name + \")\";\n return Wrapped;\n}\n\nfunction useErrorHandler(givenError) {\n var _React$useState = React.useState(null),\n error = _React$useState[0],\n setError = _React$useState[1];\n\n if (givenError != null) throw givenError;\n if (error != null) throw error;\n return setError;\n}\n/*\neslint\n @typescript-eslint/sort-type-union-intersection-members: \"off\",\n @typescript-eslint/no-throw-literal: \"off\",\n @typescript-eslint/prefer-nullish-coalescing: \"off\"\n*/\n\nexport { ErrorBoundary, useErrorHandler, withErrorBoundary };\n","import type { RootState } from '@/store';\n\nimport { useShallowEqualSelector } from '.';\n\ntype LocalState = RootState['dialogs'];\ntype LocalSelector = (state: LocalState) => T;\n\nexport function useDialogs(): LocalState;\nexport function useDialogs(selector: LocalSelector): T;\n\nexport function useDialogs(selector?: LocalSelector) {\n return useShallowEqualSelector((state) =>\n selector ? selector(state.dialogs) : (state.dialogs as LocalState),\n );\n}\n","import { useCallback } from 'react';\n\nimport { useDispatch } from '@/redux/hooks';\nimport { DialogsActions } from '@common/redux/actions/dialogs';\n\nconst useHideDialog = () => {\n const dispatch = useDispatch();\n return useCallback(() => dispatch(DialogsActions.hideDialog()), [dispatch]);\n};\n\nexport default useHideDialog;\n","import React, { forwardRef } from 'react';\n\nimport type { ButtonProps, ButtonType } from '@feather';\nimport { Button } from '@feather/components/button';\n\ninterface ConfirmButtonProps {\n isFetching?: boolean;\n disabled?: boolean;\n children: any;\n [key: string]: any;\n}\n\nexport const CancelButton = (props: Omit & { buttonType?: ButtonType }) => {\n const { buttonType = 'tertiary', ...buttonProps } = props;\n return \n );\n },\n);\n\nexport const DeleteButton: React.FC> = ({ children, ...rest }) => {\n return (\n \n );\n};\n","import styled, { css } from 'styled-components';\n\nimport { cssVariables, transitionDefault } from '@feather';\nimport type { StyledProps } from '@ui';\n\n/** @deprecated it overrides `type` attribute causing buggy behaviors on password inputs */\nconst BasicInput = styled.input.attrs({\n type: 'text',\n})`\n display: block;\n width: 100%;\n font-size: 14px;\n padding: 0 8px;\n height: 40px;\n color: ${cssVariables('neutral-10')};\n border: 1px solid ${cssVariables('neutral-4')};\n line-height: 1.5;\n border-radius: 4px;\n transition: all 0.25s ${transitionDefault};\n background: ${(props) => (props.readOnly ? cssVariables('neutral-1') : 'white')};\n cursor: ${(props) => (props.readOnly ? 'text' : 'auto')};\n -webkit-appearance: none;\n\n &:focus {\n outline: none;\n border: 1px solid ${cssVariables('purple-7')};\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);\n }\n\n &:read-only {\n color: ${cssVariables('content-2')};\n background: ${cssVariables('neutral-3')};\n border-color: ${cssVariables('neutral-3')};\n }\n\n &:disabled {\n color: ${cssVariables('content-disabled')};\n border-color: ${cssVariables('border-disabled')};\n }\n\n ${(props) => props.styles}\n`;\n\nconst BasicTextarea = styled.textarea`\n display: block;\n width: 100%;\n font-size: 14px;\n background: white;\n padding: 4px 12px 5px;\n border: 1px solid ${cssVariables('neutral-4')};\n color: ${cssVariables('neutral-10')};\n line-height: 1.5;\n border-radius: 4px;\n resize: vertical;\n transition: all 0.2s ${transitionDefault};\n\n &:focus {\n outline: none;\n border: 1px solid ${cssVariables('purple-7')};\n box-shadow: 0 1px 5px rgba(0, 0, 0, 0.28);\n }\n\n ${(props) => props.styles};\n ${(props) =>\n props.disabled &&\n css`\n background: ${cssVariables('neutral-1')};\n color: ${cssVariables('neutral-5')};\n `}\n`;\n\n// InputAddons\n\nconst InputIndicator = styled.span`\n position: absolute;\n top: 0;\n left: 0;\n display: block;\n width: 16px;\n height: 16px;\n line-height: 16px;\n color: ${cssVariables('neutral-5')};\n text-align: center;\n user-select: none;\n border: 1px solid ${(props) => (props.hasError ? cssVariables('red-5') : cssVariables('neutral-3'))};\n background-repeat: no-repeat;\n background-position: center center;\n transition: all 0.2s ${transitionDefault};\n ${(props) => props.styles};\n`;\n\nexport { BasicInput, BasicTextarea, InputIndicator };\n","import type { ReactNode } from 'react';\n\nimport styled, { css } from 'styled-components';\n\nimport { Body, Typography, cssVariables, transitions } from '@feather';\nimport { Avatar } from '@feather/components/avatar';\n\nimport { BasicInput } from '../input';\n\nexport const DialogFormLabel = styled.label`\n display: flex;\n align-items: center;\n ${Typography['label-02']}\n margin-bottom: 6px;\n color: ${cssVariables('neutral-10')};\n\n > small {\n ${Typography['label-02']}\n color: ${cssVariables('neutral-7')};\n margin-left: 2px;\n }\n`;\n\nexport const DialogFormSet = styled.div<{ alignItems?: string }>`\n position: relative;\n line-height: 1;\n align-items: ${(props) => (props.alignItems ? props.alignItems : 'center')};\n`;\n\nconst DialogFormContent = styled.div`\n display: flex;\n`;\n\nexport const DialogFormBody = styled.div<{ inline?: boolean; titleWidth?: number; children?: ReactNode | ReactNode[] }>`\n font-size: 14px;\n line-height: 20px;\n\n ${DialogFormSet} + ${DialogFormSet} {\n margin-top: 24px;\n }\n\n ${(props) =>\n props.inline &&\n css`\n ${DialogFormSet} {\n display: flex;\n justify-content: left;\n\n &:last-child {\n padding-bottom: 27px;\n }\n }\n\n ${DialogFormSet} + ${DialogFormSet} {\n margin-top: 25px;\n }\n\n ${DialogFormLabel} {\n margin-bottom: 0;\n font-size: 15px;\n width: ${props.titleWidth ? `${props.titleWidth}%` : 'auto'};\n }\n\n ${DialogFormContent},\n ${BasicInput},\n .Select {\n width: ${props.titleWidth ? `${100 - props.titleWidth}%` : '100%'};\n }\n `}\n`;\n\nexport const DialogFormDivider = styled.div`\n width: 100%;\n height: 1px;\n background: ${cssVariables('neutral-3')};\n margin: 24px 0;\n`;\n\nexport const ListCountText = styled.div`\n font-size: 13px;\n color: ${cssVariables('neutral-10')};\n font-weight: 600;\n margin-bottom: 8px;\n line-height: 1;\n`;\n\nexport const ListHeader = styled.div`\n background: ${cssVariables('neutral-1')};\n display: flex;\n border: 1px solid ${cssVariables('border-3')};\n border-bottom: none;\n border-top-right-radius: 4px;\n border-top-left-radius: 4px;\n height: 36px;\n line-height: 34px;\n font-weight: 600;\n padding: 0 16px;\n`;\n\nexport const ListHeaderColumn = styled.div`\n flex-grow: 1;\n flex-shrink: 1;\n flex-basis: 25%;\n font-size: 12px;\n color: ${cssVariables('neutral-10')};\n padding: 0 16px 0 0;\n`;\n\nexport const ListHeaderColumnFunc = styled.div`\n width: 18px;\n`;\n\nexport const ListHeaderColumnImage = styled.div`\n width: 24px;\n margin-right: 16px;\n`;\n\nexport const ListContent = styled.div`\n background: white;\n border: 1px solid ${cssVariables('border-3')};\n border-top: none;\n border-bottom-right-radius: 4px;\n border-bottom-left-radius: 4px;\n max-height: 204px;\n overflow-y: auto;\n`;\n\nexport const ListContentItem = styled.div`\n display: flex;\n position: relative;\n padding: 8px 1rem;\n border-bottom: 1px solid ${cssVariables('border-3')};\n\n &:last-child {\n border-bottom: none;\n }\n`;\n\nexport const ListContentItemImage = styled(Avatar).attrs({ size: 24 })`\n margin-right: 16px;\n`;\n\nexport const ListContentItemText = styled.div`\n flex-grow: 1;\n flex-shrink: 1;\n flex-basis: 25%;\n padding-right: 16px;\n word-wrap: break-word;\n overflow: hidden;\n font-size: 14px;\n color: ${cssVariables('neutral-7')};\n line-height: 1.43;\n`;\n\nexport const DialogFormAction = styled.div`\n margin: 0 -24px;\n padding: 32px 24px 0;\n display: flex;\n flex-direction: row;\n justify-content: flex-end;\n align-items: baseline;\n\n > * + * {\n margin-left: 4px;\n }\n`;\n\nexport const DialogAlertTitle = styled.div`\n font-size: 18px;\n font-weight: 500;\n margin-bottom: 16px;\n`;\n\nexport const DialogAlertNote = styled.div`\n padding-left: 13px;\n position: relative;\n border-left: 3px solid ${cssVariables('purple-7')};\n font-size: 15px;\n line-height: 1.53;\n letter-spacing: -0.3px;\n color: ${cssVariables('neutral-10')};\n margin: 0 0 24px 0;\n`;\n\nexport const DialogAlertDesc = styled.div`\n ${Body['body-short-01']};\n color: ${cssVariables('neutral-10')};\n b {\n font-weight: 600;\n }\n & + & {\n margin-top: 16px;\n }\n`;\n\nexport const DialogAlertLink = styled.div<{ disabled?: boolean }>`\n display: flex;\n align-items: center;\n font-size: 16px;\n font-weight: 500;\n letter-spacing: -0.3px;\n color: ${(props) => (props.disabled ? cssVariables('content-disabled') : cssVariables('content-primary'))};\n text-decoration: ${(props) => (props.disabled ? 'line-through' : 'none')};\n transition: ${transitions({ properties: ['color'], duration: 0.3 })};\n\n &:hover {\n text-decoration: ${(props) => (props.disabled ? 'line-through' : 'underline')};\n ${(props) =>\n !props.disabled &&\n css`\n cursor: pointer;\n color: ${cssVariables('content-primary-hover')};\n\n svg {\n fill: ${cssVariables('content-primary-hover')};\n }\n `}\n\n svg {\n transform: translateX(4px);\n }\n }\n\n svg {\n margin-left: 4px;\n transition: ${transitions({ properties: ['transform', 'fill'], duration: 0.3 })};\n }\n`;\n\nexport const DialogAlert = styled.div`\n ${DialogAlertLink} + ${DialogAlertDesc} {\n margin-top: 24px;\n }\n ${DialogAlertLink} + ${DialogAlertLink} {\n margin-top: 15px;\n }\n & + ${DialogFormSet} {\n margin-top: 30px;\n }\n`;\n","import type { ComponentType, FC, ReactNode } from 'react';\nimport { Children, useCallback, useEffect, useMemo, useRef, useState } from 'react';\n\nimport type { IntlShape } from '@formatjs/intl';\nimport { createIntl } from '@formatjs/intl';\nimport type { FormatXMLElementFn } from 'intl-messageformat';\nimport type { PrimitiveType } from 'react-intl';\nimport { useIntl } from 'react-intl';\n\nexport interface TFunction {\n (key: K): string;\n (key: K, values: Record>): string;\n (key: K, values: Record>): ReactNode;\n}\n\nexport type TranslationProps = { t: TFunction; intl: IntlShape };\n\ntype ImportFunction = (locale: string) => Promise;\n\nexport function useTranslationOfLocale({\n locale,\n importFn,\n}: {\n locale: string;\n importFn: ImportFunction;\n}): TranslationProps & { isLoading: boolean } {\n const [translation, setTranslation] = useState<{ isLoading: boolean; data?: Record }>({\n isLoading: true,\n });\n\n const isUnmountedRef = useRef(false);\n\n useEffect(() => {\n // TODO: check required\n isUnmountedRef.current = false;\n return () => {\n isUnmountedRef.current = true;\n };\n }, []);\n\n useEffect(() => {\n const loadTranslation = async () => {\n try {\n setTranslation({ isLoading: true });\n const data = (await importFn(locale)).default;\n\n if (!isUnmountedRef.current) {\n setTranslation({ isLoading: false, data });\n }\n } catch (error) {\n if (!isUnmountedRef.current) {\n setTranslation((state) => ({ ...state, isLoading: false }));\n }\n }\n };\n loadTranslation();\n }, [importFn, locale]);\n\n const intl = useMemo(() => {\n // Beware that this may impact the performance if there are many instances of the component that calls this hook rendered at the same time.\n return createIntl({ locale, messages: translation.data });\n }, [locale, translation.data]);\n\n return {\n isLoading: translation.isLoading,\n t: useCallback(\n (key, values) => {\n if (!values) {\n return intl.formatMessage({ id: key }) as string;\n }\n\n const result = intl.formatMessage({ id: key }, values);\n return Array.isArray(result) ? Children.toArray(result) : (result as string);\n },\n [intl],\n ) as TFunction,\n intl,\n };\n}\n\nfunction useTranslation(importFn: ImportFunction) {\n const { locale } = useIntl();\n return useTranslationOfLocale({ locale, importFn });\n}\n\nexport function withTranslation(\n Component: ComponentType

>,\n importFn: Parameters[0],\n) {\n const Translated: FC

= (props) => {\n const { isLoading, t, intl } = useTranslation(importFn);\n\n if (isLoading) {\n return null;\n }\n return ;\n };\n Translated.displayName = 'Translated';\n\n return Translated;\n}\n\nexport default useTranslation;\n","import type { AriaAttributes, FC, ReactNode } from 'react';\nimport { useCallback } from 'react';\n\nimport FocusTrap from 'focus-trap-react';\nimport { useIntl } from 'react-intl';\nimport type { SimpleInterpolation } from 'styled-components';\nimport styled, { css } from 'styled-components';\n\nimport { Body, Headings, cssVariables, elevation } from '@feather';\nimport { IconButton } from '@feather/components/button';\nimport * as Icons from '@feather/components/icons';\nimport { useTranslationOfLocale } from '@hooks/useTranslation';\nimport { getFocusTrapOptions } from '@utils/focusTrapOptions';\n\nimport type messages from './translation/en.json';\n\ntype Size = 'small' | 'large' | 'xlarge' | '2xlarge' | number;\n\nconst getDialogWidth = (size: Size) => {\n if (typeof size === 'number' && size > 0) {\n return size;\n }\n\n switch (size) {\n case 'large':\n return 640;\n case 'xlarge':\n return 760;\n case '2xlarge':\n return 800;\n case 'small':\n default:\n return 480;\n }\n};\n\ninterface DialogProps {\n title: ReactNode;\n description?: ReactNode;\n children?: ReactNode;\n body?: ReactNode;\n size?: Size;\n isFullBody?: boolean;\n titleButtonComponent?: ReactNode;\n styles?: SimpleInterpolation;\n onClose?: () => any;\n className?: string;\n dialogClassName?: string;\n hideCloseIconButton?: boolean;\n extra?: ReactNode;\n\n /**\n * With this option you can specify a different element to receive that initial focus. Can be a selector string\n * (which will be passed to document.querySelector() to find the DOM node), or a function that returns a DOM node.\n */\n initialFocus?: string | (() => HTMLElement | false);\n 'aria-busy'?: AriaAttributes['aria-busy'];\n shouldCloseOnOverlayClick?: boolean;\n}\n\ninterface LocalizedDialogProps extends DialogProps {\n locale: string;\n}\n\nconst DialogContainer = styled.div`\n position: fixed;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n\n width: 100%;\n height: 100%;\n user-select: text;\n overflow-y: auto;\n`;\n\nconst DialogWrapper = styled.div`\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n min-height: 100%;\n margin: 0 auto;\n padding: 30px 0;\n`;\n\nconst StyledDialog = styled.div<{\n size: 'small' | 'large' | 'xlarge' | '2xlarge' | number;\n styles: SimpleInterpolation;\n}>`\n user-select: initial;\n display: flex;\n position: relative;\n flex-direction: column;\n outline: 0;\n border-radius: 5px;\n background: white;\n width: ${({ size }) => `${getDialogWidth(size)}px`};\n ${elevation.modal};\n\n ${(props) => props.styles};\n`;\n\nconst DialogHeader = styled.div`\n padding: 16px 24px;\n padding-right: 56px;\n min-height: 64px;\n display: flex;\n align-items: flex-start;\n flex-direction: column;\n position: relative;\n`;\n\nconst DialogTitle = styled.h1`\n ${Headings['heading-04']}\n color: ${cssVariables('neutral-10')};\n word-break: break-word;\n white-space: pre-wrap;\n margin-top: 2px;\n padding-right: 32px;\n`;\n\nconst DialogDescription = styled.div`\n ${Body['body-short-01']}\n color: ${cssVariables('neutral-10')};\n margin-top: 18px;\n`;\n\nconst DialogHeaderInterfaceSection = styled.div`\n position: absolute;\n top: 16px;\n right: 16px;\n`;\n\nconst DialogClose = styled(IconButton)`\n cursor: pointer;\n`;\n\nexport const DialogBody = styled.div<{ isFullBody?: boolean }>`\n padding: ${(props) => (props.isFullBody ? '0' : '0 24px 24px')};\n flex: 1;\n display: flex;\n flex-direction: column;\n overflow-wrap: break-word;\n`;\n\nexport const LocalizedDialog: FC = ({\n title,\n description,\n titleButtonComponent,\n body,\n isFullBody,\n children,\n className,\n dialogClassName,\n onClose = () => {},\n size = 'small',\n styles = css``,\n extra,\n hideCloseIconButton = false,\n initialFocus = '[role=\"dialog\"]',\n locale,\n 'aria-busy': ariaBusy = false,\n shouldCloseOnOverlayClick = false,\n}) => {\n const { t, isLoading } = useTranslationOfLocale({\n locale,\n importFn: useCallback((locale) => import(`./translation/${locale}.json`), []),\n });\n\n const renderHeader = () => {\n if (!title) {\n return null;\n }\n\n return (\n \n \n {title}\n {titleButtonComponent}\n \n {description && {description}}\n \n );\n };\n\n const renderBody = () => {\n if (!body) {\n return children;\n }\n return {body};\n };\n\n // Include toasts in the focus trap container\n const portalFocusTrapElement = document.getElementById('portal_focus_trap');\n\n const handleWrapperClick = (e) => {\n if (shouldCloseOnOverlayClick && e.target === e.currentTarget) {\n onClose();\n }\n };\n\n return (\n \n \n \n \n {renderHeader()}\n {renderBody()}\n \n {extra}\n {!hideCloseIconButton && (\n \n )}\n \n \n \n \n \n );\n};\n\nexport const Dialog: FC = (props) => {\n const { locale } = useIntl();\n return ;\n};\n","import { cssColors } from '@feather';\n\n// WILL BE DEPRECRATED\nexport const colors_old = {\n primary: {\n purple: {\n dark: '#5c47b3',\n },\n skyBlue: {\n core: '#3a9ee6',\n },\n },\n background: {\n gray: '#eceff1',\n },\n};\n\nexport const DATA_VIZ_COLORS = [\n cssColors('data-viz-1'),\n cssColors('data-viz-2'),\n cssColors('data-viz-3'),\n cssColors('data-viz-4'),\n cssColors('data-viz-5'),\n cssColors('data-viz-6'),\n cssColors('data-viz-7'),\n cssColors('data-viz-8'),\n cssColors('data-viz-9'),\n cssColors('data-viz-10'),\n];\n\nexport const DATA_VIZ_HOVER_COLORS = [\n cssColors('data-viz-1-hover'),\n cssColors('data-viz-2-hover'),\n cssColors('data-viz-3-hover'),\n cssColors('data-viz-4-hover'),\n cssColors('data-viz-5-hover'),\n cssColors('data-viz-6-hover'),\n cssColors('data-viz-7-hover'),\n cssColors('data-viz-8-hover'),\n cssColors('data-viz-9-hover'),\n cssColors('data-viz-10-hover'),\n];\n\n/** @knipignore */\nexport const getDataVizColors = ({ dataSize }: { dataSize: number }) => {\n const maxSize = DATA_VIZ_COLORS.length;\n if (dataSize > maxSize) {\n throw new Error(`The \"dataSize\" cannot be bigger than ${maxSize}`);\n }\n return DATA_VIZ_COLORS.slice(0, dataSize);\n};\n\n/** @knipignore */\nexport const getDataVizHoverColors = ({ dataSize }: { dataSize: number }) => {\n const maxSize = DATA_VIZ_HOVER_COLORS.length;\n if (dataSize > maxSize) {\n throw new Error(`The \"dataSize\" cannot be bigger than ${maxSize}`);\n }\n return DATA_VIZ_HOVER_COLORS.slice(0, dataSize);\n};\n\nexport const getDoughnutChartColors = ({ dataSize }: { dataSize: number }) => {\n const maxSize = DATA_VIZ_COLORS.length;\n if (dataSize > maxSize) {\n throw new Error(`The \"dataSize\" cannot be bigger than ${maxSize}`);\n }\n return {\n background: getDataVizColors({ dataSize }),\n hover: getDataVizHoverColors({ dataSize }),\n size: dataSize,\n };\n};\n","export const ZIndexes = {\n coachMark: 999998,\n tooltipOverNavigation: 12000,\n callsWidget: 12000,\n navigation: 11000,\n portal: 9999,\n previewBackground: 12000,\n timePickerPanel: 9999,\n stickyHeader: 9999,\n drawer: 8000,\n drawerBackground: 7000,\n chartHoverTooltip: 99999,\n sidebar: 900,\n};\n","import { css } from 'styled-components';\n\nexport * from './colors';\nexport * from './zIndexes';\n\n/** @deprecated Define explicit types for each component. */\nexport interface StyledProps {\n styles?: any;\n [key: string]: any;\n}\n\nexport const MEDIA_SIZES = {\n TABLET: 1280,\n TABLET_VERTICAL: 767,\n MOBILE_LARGE: 992,\n MOBILE_SMALL: 374,\n};\n\nexport const media = Object.keys(MEDIA_SIZES).reduce((acc, label) => {\n acc[label] = (literals: TemplateStringsArray, ...placeholders: any[]) => css`\n @media (max-width: ${MEDIA_SIZES[label]}px) {\n ${css(literals, ...placeholders)};\n }\n `;\n\n return acc;\n}, {} as Record string>);\n","import { useEffect, useState } from 'react';\nimport { createPortal } from 'react-dom';\n\nimport { ZIndexes } from '@ui';\n\ninterface PortalProps extends React.HTMLProps {\n zIndex?: number;\n}\n\nexport const Portal = ({ children, zIndex }: PortalProps) => {\n const [container, setContainer] = useState();\n\n useEffect(() => {\n const portalRoot = document.getElementById('portal_root');\n\n const element = document.createElement('div');\n element.style.position = 'absolute';\n element.style.top = '0';\n element.style.right = '0';\n element.style.left = '0';\n element.style.zIndex = `${zIndex ?? ZIndexes.portal}`;\n portalRoot?.appendChild(element);\n setContainer(element);\n\n return () => {\n element.parentNode?.removeChild(element);\n };\n }, [zIndex]);\n\n return container ? createPortal(children, container) : null;\n};\n","import type { ReactNode } from 'react';\nimport { Children, cloneElement } from 'react';\nimport { Component } from 'react';\nimport * as ReactDOM from 'react-dom';\n\nimport { Transition, TransitionGroup } from 'react-transition-group';\nimport styled, { css } from 'styled-components';\n\nimport { cssVariables } from '@feather';\nimport type { StyledProps } from '@ui';\nimport { transitionDefault } from '@ui/styles';\n\nimport { Portal } from '../portal';\n\nconst Backdrop = styled.div`\n position: fixed;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n background-color: ${cssVariables('bg-overlay-4')};\n overflow: auto;\n user-select: none;\n ${(props) => props.styles};\n`;\n\ntype Props = {\n isOpen: boolean;\n usePortal?: boolean;\n canOutsideClickClose?: boolean;\n hasBackdrop?: boolean;\n backdropStyles?: any;\n zIndex?: number;\n transitionDuration?: number;\n onClose?: (e?) => void;\n handleBackdropClick?: (e?) => void;\n children: ReactNode;\n};\n\ntype State = {\n hasEverOpened: boolean;\n};\n\nconst transitionStyles = {\n entering: {\n opacity: 0,\n },\n entered: {\n opacity: 1,\n },\n exiting: {\n opacity: 0,\n },\n exited: {\n opacity: 0,\n },\n};\n\nexport class Overlay extends Component {\n private containerComponent: Element | null = null;\n private refHandlers = {\n container: (ref) => {\n this.containerComponent = ReactDOM.findDOMNode(ref) as Element | null;\n },\n };\n\n public state = {\n hasEverOpened: this.props.isOpen,\n };\n componentDidMount() {\n this.overlayWillClose();\n if (this.props.isOpen) {\n this.overlayWillOpen();\n }\n }\n\n static getDerivedStateFromProps(props, state) {\n if (state.hasEverOpened !== props.isOpen) {\n return {\n ...state,\n hasEverOpened: props.isOpen,\n };\n }\n return null;\n }\n\n componentDidUpdate(prevProps) {\n if (prevProps.isOpen && !this.props.isOpen) {\n this.overlayWillClose();\n } else if (!prevProps.isOpen && this.props.isOpen) {\n this.overlayWillOpen();\n }\n }\n\n private handleBackdropMouseDown = () => {\n const { isOpen, onClose, canOutsideClickClose = true } = this.props;\n if (isOpen && canOutsideClickClose) {\n if (onClose) {\n onClose();\n }\n }\n if (this.props.handleBackdropClick) {\n this.props.handleBackdropClick();\n }\n };\n\n private handleDocumentClick = (e) => {\n const { isOpen, onClose, canOutsideClickClose = true } = this.props;\n\n const eventTarget = e.target;\n const isClickInOverlay = this.containerComponent !== null && this.containerComponent.contains(eventTarget);\n\n if (isOpen && canOutsideClickClose && !isClickInOverlay) {\n if (onClose) {\n onClose(e);\n }\n }\n };\n\n private overlayWillOpen = () => {\n const { canOutsideClickClose = true, hasBackdrop = false } = this.props;\n if (canOutsideClickClose && !hasBackdrop) {\n document.addEventListener('click', this.handleDocumentClick);\n document.addEventListener('touchend', this.handleDocumentClick);\n }\n };\n\n private overlayWillClose = () => {\n document.removeEventListener('click', this.handleDocumentClick);\n document.removeEventListener('touchend', this.handleDocumentClick);\n };\n\n private renderBackdrop = () => {\n const {\n zIndex,\n isOpen,\n canOutsideClickClose = true,\n hasBackdrop = false,\n backdropStyles = css``,\n transitionDuration = 200,\n } = this.props;\n\n const defaultStyle = {\n transition: `opacity ${transitionDuration}ms ${transitionDefault}`,\n };\n\n if (hasBackdrop && isOpen) {\n return (\n \n {(state) => (\n \n )}\n \n );\n }\n return '';\n };\n\n private maybeRenderChild = (child) => {\n if (child == null) {\n return null;\n }\n\n const { transitionDuration = 200 } = this.props;\n\n const decoratedChildren = cloneElement(child as React.ReactElement);\n\n const defaultStyle = {\n transition: `opacity ${transitionDuration}ms ${transitionDefault}`,\n position: 'relative',\n zIndex: 1,\n };\n\n return (\n \n {(state) => {\n return (\n \n {decoratedChildren}\n \n );\n }}\n \n );\n };\n\n public render() {\n const { isOpen = false, zIndex, children, usePortal = true } = this.props;\n\n if (!this.state.hasEverOpened) {\n return null;\n }\n\n const childrenWithTransitions: any[] = isOpen ? Children.map(children, this.maybeRenderChild) : [];\n childrenWithTransitions.push(this.renderBackdrop());\n\n const transitionGroup = (\n \n {childrenWithTransitions}\n \n );\n\n if (usePortal) {\n return {transitionGroup};\n }\n return transitionGroup;\n }\n}\n","import type { ComponentType, VFC } from 'react';\n\nimport { DialogType } from './DialogType';\n\n/**\n * Returns an object containing a function that can be passed to `React.lazy`.\n *\n * @param importFunc a function that calls a dynamic `import()` that must return a Promise which resolves to a module\n * with a default export containing a React component.\n */\nconst lazy = >>(importFunc: () => Promise<{ default: T }>) => ({\n importFunc,\n});\nconst ResourceMetadataDialog = lazy(() => import('@/shared/ResourceMetadataDialog'));\n\nconst AssignTransferTicketToAgentDialog = lazy(\n () => import('@desk/containers/dialogs/AssignTransferTicketToAgentDialog'),\n);\nconst CloseTicketDialog = lazy(() => import('@desk/containers/dialogs/CloseTicketDialog'));\nconst ConfirmEndOfChatDialog = lazy(() => import('@desk/containers/dialogs/ConfirmEndOfChatDialog'));\nconst CreateAgentGroupDialog = lazy(() => import('@desk/containers/dialogs/CreateAgentGroupDialog'));\nconst AeroCreateEmailChannelDialog = lazy(\n () => import('@aero/containers/Channels/components/AeroCreateEmailChannelDialog'),\n);\nconst CreateTokenDialog = lazy(() => import('@desk/containers/dialogs/CreateTokenDialog'));\nconst TransferTicketToAgentGroupDialog = lazy(\n () => import('@desk/containers/dialogs/TransferTicketToAgentGroupDialog'),\n);\n\nconst CreateStudioRoomDialog = lazy(() => import('@calls/containers/Studio/dialogs/CreateStudioRoomDialog'));\nconst CreateRoomDialog = lazy(() => import('@calls/dialogs/CreateRoomDialog'));\nconst DeleteRoomDialog = lazy(() => import('@calls/dialogs/DeleteRoomDialog'));\nconst EditCustomItemsDialog = lazy(() => import('@calls/dialogs/EditCustomItemsDialog'));\nconst CustomItemsColumnsDialog = lazy(() => import('@calls/dialogs/CustomItemsColumnsDialog'));\nconst CallsStudioRoomInviteDialog = lazy(() => import('@calls/containers/Studio/dialogs/CallsStudioRoomInviteDialog'));\nconst CallsStudioAddExistingRoomDialog = lazy(\n () => import('@calls/containers/Studio/dialogs/CallsStudioAddExistingRoomDialog'),\n);\nconst CallsStudioMobileCreateUserDialog = lazy(\n () => import('@calls/containers/Studio/dialogs/CallsStudioMobileAppUserDialogs/CallsStudioMobileCreateUserDialog'),\n);\nconst CallsStudioMobileAddUsersDialog = lazy(\n () => import('@calls/containers/Studio/dialogs/CallsStudioMobileAppUserDialogs/CallsStudioMobileAddUsersDialog'),\n);\nconst CallsStudioMobileEditUserDialog = lazy(\n () => import('@calls/containers/Studio/dialogs/CallsStudioMobileAppUserDialogs/CallsStudioMobileEditUserDialog'),\n);\nconst ManageDirectCallsColumnsDialog = lazy(\n () => import('@calls/containers/DirectCalls/manageDirectCallsColumnsDialog'),\n);\nconst PushAPNSVoIPEditDialog = lazy(\n () => import('@calls/containers/Settings/Notifications/apnsDialogs/PushAPNSVoIPEditDialog'),\n);\nconst PushAPNSVoIPRegisterDialog = lazy(\n () => import('@calls/containers/Settings/Notifications/apnsDialogs/PushAPNSVoIPRegisterDialog'),\n);\n\nconst CallsStudioMobileRemoveUserDialog = lazy(\n () => import('@calls/containers/Studio/dialogs/callsStudioMobileRemoveUserDialog'),\n);\nconst CallsUpdateSubscriptionDialog = lazy(\n () => import('../FullScreenModals/CallsVoucherModal/dialogs/CallsUpdateSubscriptionDialog'),\n);\nconst PhoneboothUserUnregisterDialog = lazy(\n () => import('@calls/containers/Studio/dialogs/PhoneboothUserUnregisterDialog'),\n);\nconst DirectCallsDurationLimitDialog = lazy(\n () => import('@calls/containers/DirectCalls/components/DirectCallsDurationLimitDialog'),\n);\nconst AnalyticsExportDialog = lazy(() => import('@chat/containers/analytics/analyticsExportDialog'));\nconst AnnouncementDataDisplayDialog = lazy(\n () => import('@chat/containers/announcements/AnnouncementDataDisplayDialog'),\n);\nconst AdminMessageDialog = lazy(() => import('@chat/containers/channels/dialogs/AdminMessageDialog'));\nconst CreateSDKUserDialog = lazy(() => import('@chat/containers/channels/dialogs/CreateSDKUserDialog'));\nconst DeleteChannelsDialog = lazy(() => import('@chat/containers/channels/dialogs/DeleteChannelsDialog'));\nconst EditChannelDialog = lazy(() => import('@chat/containers/channels/dialogs/EditChannelDialog'));\nconst ChannelDataDialog = lazy(() => import('@chat/containers/channels/dialogs/ChannelDataDialog'));\nconst UpdateSDKUserDialog = lazy(() => import('@chat/containers/channels/dialogs/UpdateSDKUserDialog'));\nconst CreateOpenChannelDialog = lazy(() => import('@chat/containers/channels/OpenChannels/CreateOpenChannelDialog'));\nconst CreateGroupChannelDialog = lazy(() => import('@chat/containers/channels/GroupChannels/CreateGroupChannelDialog'));\nconst ChangeToSupergroupDialog = lazy(() => import('@chat/containers/channels/GroupChannels/ChangeToSupergroupDialog'));\nconst DeleteMessageDialog = lazy(() => import('@chat/containers/messages/deleteMessageDialog'));\nconst EditMessageDialog = lazy(() => import('@chat/containers/moderationTools/dialogs/EditMessageDialog'));\nconst PreviousChatDialog = lazy(\n () => import('@chat/containers/moderationTools/groupChannels/PreviousChatDialog/PreviousChatDialog'),\n);\nconst ModeratorInformationDialog = lazy(\n () => import('@chat/containers/moderationTools/dialogs/ModeratorInformationDialog'),\n);\nconst BanMuteUserDialog = lazy(() => import('@chat/containers/moderationTools/dialogs/BanMuteUserDialog'));\nconst PushAPNsSaveDialog = lazy(() => import('@chat/containers/settings/notification/dialogs/PushAPNsSaveDialog'));\nconst PushFCMSaveDialog = lazy(() => import('@chat/containers/settings/notification/dialogs/PushFCMSaveDialog'));\nconst PushHuaweiSaveDialog = lazy(() => import('@chat/containers/settings/notification/dialogs/PushHuaweiSaveDialog'));\nconst PushTesterDialog = lazy(() => import('@chat/containers/settings/notification/dialogs/PushTesterDialog'));\nconst RegexEditorDialog = lazy(() => import('@chat/containers/settings/ProfanityFilterSettings/RegexEditorDialog'));\nconst ChangeEmailDialog = lazy(() => import('@common/containers/account/ChangeEmailDialog'));\nconst DeleteAccountDialog = lazy(() => import('@common/containers/account/deleteAccountDialog'));\nconst RegisterTwoFactorDialog = lazy(() => import('@common/containers/account/RegisterTwoFactorDialog'));\nconst CallsPaymentDialog = lazy(() => import('../FullScreenModals/CallsVoucherModal/dialogs/CallsPaymentDialog'));\nconst CallsRateTooltipDialog = lazy(() => import('@calls/dialogs/RateTooltipDialog'));\nconst ChangePlanDialog = lazy(\n () => import('@common/containers/FullScreenModals/SubscriptionPlanModal/ChangePlanDialog'),\n);\nconst ChangeAppNameDialog = lazy(() => import('@common/containers/home/changeAppNameDialog'));\nconst DeleteApplicationDialog = lazy(() => import('@common/containers/home/deleteApplicationDialog'));\nconst RegisterCardDialog = lazy(() => import('@common/containers/settings/billing/RegisterCardDialog'));\nconst ChangeMemberRoleDialog = lazy(() => import('@common/containers/settings/members/changeMemberRoleDialog'));\nconst InviteMemberDialog = lazy(() => import('@common/containers/settings/members/InviteMemberDialog'));\nconst InviteAsGroupChannelMemberDialog = lazy(\n () => import('@chat/containers/moderationTools/components/ModerationToolHeader/InviteAsGroupChannelMemberDialog'),\n);\nconst SelectApplicationsDialog = lazy(() => import('@common/containers/settings/roles/selectApplicationsDialog'));\nconst OneMoreStepToGoDialog = lazy(() => import('@common/containers/settings/security/oneMoreStepToGoDialog'));\nconst SamlSSOConfigDialog = lazy(() => import('@common/containers/settings/security/SamlSsoConfigDialog'));\nconst CallsFreeVoucherDialog = lazy(() => import('@core/containers/app/CallsFreeVoucherDialog'));\nconst CreateAppDialog = lazy(() => import('@core/containers/app/createAppDialog'));\nconst SubscriptionPlanDialog = lazy(() => import('@core/containers/overview/subscriptionPlanDialog'));\nconst GetAPITokenDialog = lazy(() => import('@core/containers/settings/general/GetAPITokenDialog'));\nconst CreateUserDialog = lazy(() => import('@core/containers/users/dialogs/createUserDialog'));\nconst DeactivateUserDialog = lazy(() => import('@core/containers/users/dialogs/deactivateUserDialog'));\nconst DeleteUsersDialog = lazy(() => import('@core/containers/users/dialogs/deleteUsersDialog'));\nconst IssueUserAccessTokenDialog = lazy(() => import('@core/containers/users/dialogs/issueUserAccessTokenDialog'));\nconst ReactivateUserDialog = lazy(() => import('@core/containers/users/dialogs/reactivateUserDialog'));\nconst RegisterUserAsOperatorDialog = lazy(() => import('@core/containers/users/dialogs/registerUserAsOperatorDialog'));\nconst AgentActivationStatusChangeDialog = lazy(\n () => import('@desk/containers/agents/list/AgentActivationStatusChangeDialog'),\n);\nconst AgentConnectionStatusChangeDialog = lazy(\n () => import('@desk/containers/agents/list/AgentConnectionStatusChangeDialog'),\n);\nconst SelectTwitterStatusRecipientsDialog = lazy(\n () => import('@desk/containers/conversation/selectTwitterStatusRecipientsDialog'),\n);\nconst UpdateAgentProfileDialog = lazy(() => import('@desk/containers/conversation/UpdateAgentProfileDialog'));\nconst ViewAgentProfileDialog = lazy(() => import('@desk/containers/conversation/ViewAgentProfileDialog'));\nconst CreateProactiveChatDialog = lazy(() => import('@desk/containers/proactiveChat/CreateProactiveChatDialog'));\nconst DeleteAgentGroupDialog = lazy(\n () => import('@desk/containers/settings/agentGroups/DeleteAgentGroupDialog/DeleteAgentGroupDialog'),\n);\nconst CreateDeskBotDialog = lazy(() => import('@desk/containers/settings/Bots/CreateDeskBotDialog'));\nconst DeactivateDeskBotDialog = lazy(() => import('@desk/containers/settings/Bots/DeactivateDeskBotDialog'));\nconst DeleteDeskBotDialog = lazy(() => import('@desk/containers/settings/Bots/DeleteDeskBotDialog'));\nconst DeleteNexmoAccountDialog = lazy(() => import('@desk/containers/settings/integration/DeleteNexmoAccountDialog'));\nconst AddWebhookDialog = lazy(() => import('@desk/containers/settings/webhooks/addWebhookDialog'));\nconst DeleteWebhookDialog = lazy(() => import('@desk/containers/settings/webhooks/deleteWebhookDialog'));\nconst EditWebhookDialog = lazy(() => import('@desk/containers/settings/webhooks/editWebhookDialog'));\nconst ReportsDataExportDialog = lazy(() => import('@desk/containers/statistics/reportsDataExportDialog'));\nconst ReopenTicketDialog = lazy(() => import('@desk/containers/ticketDetail/reopenTicketDialog'));\nconst ExportTicketDialog = lazy(() => import('@desk/containers/tickets/exportTicketDialog'));\nconst ExportTicketsInfoDialog = lazy(() => import('@desk/containers/tickets/exportTicketsInfoDialog'));\nconst ExportMissedTicketDialog = lazy(() => import('@desk/containers/views/exportMissedTicketDialog'));\nconst ExportPendingTicketDialog = lazy(() => import('@desk/containers/views/exportPendingTicketDialog'));\nconst ExportDirectCallLogsDialog = lazy(\n () => import('@calls/containers/DirectCalls/DataExports/ExportDirectCallLogsDialog'),\n);\nconst DeleteDeskSendbirdMessageDialog = lazy(\n () => import('@desk/containers/conversation/message/DeleteDeskSendbirdMessageDialog'),\n);\nconst EditQuickReplyCategoryDialog = lazy(() => import('@desk/containers/settings/quickReplies/EditCategoryDialog'));\nconst DeleteQuickReplyCategoryDialog = lazy(\n () => import('@desk/containers/settings/quickReplies/DeleteCategoryDialog'),\n);\nconst CheckAllRequiredFieldsFilledDialog = lazy(\n () => import('@desk/containers/dialogs/CheckAllRequiredFieldsFilledDialog'),\n);\nconst DeskAIPromotionDialog = lazy(\n () => import('@desk/containers/conversation/input/TicketInputButtons/AIPromotionDialog'),\n);\nconst CustomerSideProfileHideTicketsDialog = lazy(\n () => import('@desk/containers/conversation/CustomerSideProfileHideTicketsDialog'),\n);\nconst OverageDialog = lazy(() => import('../FullScreenModals/SubscriptionPlanModal/OverageDialog'));\nconst CallsDisableSubscriptionDialog = lazy(\n () => import('../settings/general/CallsCredits/CallsDisableSubscriptionDialog'),\n);\nconst IPRestrictionGuideDialog = lazy(() => import('../settings/security/IPRestrictionGuideDialog'));\nconst ChangePasswordDialog = lazy(() => import('./ChangePassword'));\nconst ConfirmDialog = lazy(() => import('./ConfirmDialog'));\nconst ConfirmWithOrganizationNameDialog = lazy(() => import('./ConfirmWithOrganizationNameDialog'));\nconst Confirm1kDialog = lazy(() => import('./Confirm1kDialog'));\nconst ReasonForCancelDialog = lazy(() => import('./ReasonForCancelDialog'));\nconst ConvertFreePlanDialog = lazy(() => import('./ConvertFreePlanDialog'));\nconst CustomDialog = lazy(() => import('./CustomDialog'));\nconst DeleteDialog = lazy(() => import('./DeleteDialog'));\nconst UninstallDialog = lazy(() => import('./UninstallDialog'));\nconst SessionTimeoutDialog = lazy(() => import('./SessionTimeoutDialog'));\nconst AddFlaggedUserDialog = lazy(() => import('@moderation/FlaggedUsers/dialogs/AddFlaggedUserDialog'));\nconst DeleteFlaggedUserDialog = lazy(() => import('@moderation/FlaggedUsers/dialogs/DeleteFlaggedUserDialog'));\n\nconst DeactivateExtensionAppDialog = lazy(\n () => import('@chat/containers/settings/ExtensionsSettings/dialogs/DeactivateExtensionAppDialog'),\n);\nconst ToggleExtensionAppStatusDialog = lazy(\n () => import('@chat/containers/settings/ExtensionsSettings/dialogs/ToggleExtensionAppStatusDialog'),\n);\n\nconst CreateLiveEventDialog = lazy(() => import('@live/containers/dialogs/CreateLiveEventDialog'));\nconst UseDefaultProfanityKeywordsDialog = lazy(\n () => import('@chat/containers/settings/ProfanityFilterSettings/dialogs/UseDefaultProfanityKeywordDialog'),\n);\nconst DownloadRecordingDialog = lazy(() => import('@/shared/DownloadRecordingDialog'));\n\nconst CreateNotificationTagDialog = lazy(\n () => import('@notifications/containers/SendNotification/CreateNotificationTagDialog'),\n);\n\nconst ImportNotificationUsersDialog = lazy(\n () => import('@notifications/containers/UserInsights/ImportNotificationUsersDialog'),\n);\n\nconst AiBotEmbeddingDialog = lazy(() => import('@/chat/aibots/containers/dialogs/AiBotEmbeddingDialog'));\n\nconst AiBotKnowledgeDialog = lazy(() => import('@/chat/aibots/containers/dialogs/AiBotKnowledgeDialog'));\n\nconst AiBotSubscriptionDialog = lazy(() => import('@/chat/aibots/containers/dialogs/AiBotSubscriptionDialog'));\n\nconst FormGuide = lazy(() => import('@/chat/aibots/containers/dialogs/FormGuideDialog'));\n\nconst FormPreviewDialog = lazy(() => import('@/chat/aibots/containers/Form/preview/FormPreviewDialog'));\n\nconst AppSelectorDialog = lazy(() => import('@core/containers/app/AppSelectorDialog'));\n\nconst AiBotStudioPluginDialog = lazy(() => import('@/chat/aibots/containers/dialogs/AiBotStudioPluginDialog'));\n\nconst UIKitFeatureIntroduction = lazy(() => import('@chat/containers/uikit/dialogs/UIKitFeatureIntroduction'));\nconst AiFeedbackDialog = lazy(() => import('@/chat/aibots/containers/Feedback/FeedbackDialog'));\nconst AiEmbedGuide = lazy(() => import('@chat/aibots/containers/dialogs/AiEmbedGuideDialog'));\nconst AddHostCandidateDialog = lazy(\n () => import('@live/containers/LiveEventDetail/LiveEventRightSidebar/AddHostCandidateDialog'),\n);\nconst ReleaseModerationDialog = lazy(() => import('@moderation/ModeratedUsers/ReleaseModerationDialog'));\n\nconst ChannelManagerDialog = lazy(() => import('@ui/components/ChannelManagerButton/ChannelManagerDialog'));\nconst WhatsAppMetadataDialog = lazy(() => import('@notifications/containers/Templates/Edit/dialogs/WhatsAppMetadata'));\nconst CopyTemplateDialog = lazy(\n () => import('@notifications/containers/Templates/TemplateCopy/dialogs/CopyTemplateDialog'),\n);\nconst CopyTemplateGuideDialog = lazy(\n () => import('@notifications/containers/Templates/TemplateCopy/dialogs/CopyTemplateGuideDialog'),\n);\n\nconst ExportDataDialog = lazy(() => import('@common/containers/DataExport/ExportDataDialog'));\n\nconst PollDetailDialog = lazy(\n () => import('@/chat/containers/moderationTools/components/BaseMessage/Poll/PollDetailDialog'),\n);\n\nconst TicketAssignmentDialog = lazy(() => import('@moderation/ModerationAllTicket/TicketAssignmentDialog'));\nconst ModeratorGroupReassignmentDialog = lazy(\n () => import('@moderation/settings/AdvancedModeration/ModeratorGroup/ModeratorGroupReassignDialog'),\n);\nconst DownloadNotificationSandboxAppDialog = lazy(\n () => import('@notifications/containers/Onboarding/components/DownloadSandboxAppDialog'),\n);\nconst AddCustomReportCategoryDialog = lazy(\n () => import('@moderation/settings/AdvancedModeration/ReportCategory/AddReportCategoryDialog'),\n);\nconst ReportCategoryUsageDialog = lazy(\n () => import('@moderation/settings/AdvancedModeration/ReportCategory/ReportCategoryUsageDialog'),\n);\n\nconst KeywordDetectionGroupDeleteDialog = lazy(\n () =>\n import(\n '@moderation/settings/AdvancedModeration/KeywordDetection/KeywordDetectionGroupDeleteDialog/KeywordDetectionGroupDeleteDialog'\n ),\n);\nconst PublishTemplateVersionDialog = lazy(() => import('@notifications/containers/Templates/dialogs/PublishVersion'));\nconst PreviousTemplateVersionDialog = lazy(() => import('@notifications/containers/Templates/dialogs/PreviousVersion'));\nconst SaveTemplateChangesDialog = lazy(() => import('@notifications/containers/Templates/dialogs/SaveChanges'));\nconst RestoreTemplateVersionMethodDialog = lazy(\n () => import('@notifications/containers/Templates/dialogs/RestoreMethod'),\n);\n\nconst TemplateEditInformationDialog = lazy(\n () => import('@notifications/containers/Templates/Edit/dialogs/InformationDialog'),\n);\nconst TemplateEditAddChannelsDialog = lazy(\n () => import('@notifications/containers/Templates/Edit/dialogs/AddChannelsDialog'),\n);\nconst TemplateEditUIKitPresetDialog = lazy(\n () => import('@notifications/containers/Templates/Edit/dialogs/UIKitPreset'),\n);\n\nconst WhatsAppSetupDialog = lazy(\n () => import('@notifications/containers/Channels/CreateSBMChannelForm/forms/WhatsAppSetupDialog'),\n);\nconst KeywordEditDialog = lazy(\n () =>\n import(\n '@moderation/settings/AdvancedModeration/KeywordDetection/CreateGroup/components/OffensiveKeywordsForm/keywordEditDialog'\n ),\n);\nconst AeroCreateUserDialog = lazy(() => import('@aero/containers/Users/dialogs/CreateUserDialog'));\nconst AeroDeleteUserDialog = lazy(() => import('@aero/containers/Users/dialogs/DeleteUserDialog'));\nconst AeroReactivateUserDialog = lazy(() => import('@aero/containers/Users/dialogs/ReactivateUserDialog'));\nconst AeroDeactivateUserDialog = lazy(() => import('@aero/containers/Users/dialogs/DeactivateUserDialog'));\nconst AeroIssueUserAccessToken = lazy(() => import('@aero/containers/Users/dialogs/IssueAccessTokenDialog'));\nconst CreateAiAgentDialog = lazy(() => import('@aero/containers/AgentSelect/components/dialogs/createAgent'));\n\nconst CreateSimulateDialog = lazy(\n () => import('@aero/containers/Test/Simulate/components/CreateSimulateDialog/CreateSimulateDialog'),\n);\n\nconst AeroAddKnowledgeSourceDialog = lazy(\n () => import('@aero/containers/Build/KnowledgeSources/dialogs/AddKnowledgeSource'),\n);\n\nconst BannedPhraseDialog = lazy(() => import('@aero/containers/Build/Safeguards/dialog/BannedPhraseDialog'));\n\nexport const dialogComponents: Record<\n DialogType,\n ReturnType | ComponentType> | VFC>\n> = {\n [DialogType.Custom]: CustomDialog,\n [DialogType.Confirm]: ConfirmDialog,\n [DialogType.ConfirmWithOrganizationName]: ConfirmWithOrganizationNameDialog,\n [DialogType.Confirm1k]: Confirm1kDialog,\n [DialogType.ReasonForCancel]: ReasonForCancelDialog,\n [DialogType.Delete]: DeleteDialog,\n [DialogType.Uninstall]: UninstallDialog,\n\n [DialogType.ChangePassword]: ChangePasswordDialog,\n\n [DialogType.DeleteAccount]: DeleteAccountDialog,\n [DialogType.ChangeEmail]: ChangeEmailDialog,\n [DialogType.RegisterTwoFactor]: RegisterTwoFactorDialog,\n\n [DialogType.Overage]: OverageDialog,\n\n [DialogType.CreateApp]: CreateAppDialog,\n [DialogType.CallsFreeVoucher]: CallsFreeVoucherDialog,\n\n [DialogType.GetApiToken]: GetAPITokenDialog,\n [DialogType.SubscriptionPlan]: SubscriptionPlanDialog,\n\n [DialogType.DeleteApplication]: DeleteApplicationDialog,\n [DialogType.ChangeAppName]: ChangeAppNameDialog,\n [DialogType.InviteMember]: InviteMemberDialog,\n\n [DialogType.InviteAsGroupChannelMember]: InviteAsGroupChannelMemberDialog,\n\n [DialogType.ChangeMemberRole]: ChangeMemberRoleDialog,\n\n [DialogType.RegisterCard]: RegisterCardDialog,\n\n [DialogType.SamlOneMoreStepToGo]: OneMoreStepToGoDialog,\n\n [DialogType.SelectApplicationsToAccess]: SelectApplicationsDialog,\n\n [DialogType.CreateOpenChannel]: CreateOpenChannelDialog,\n [DialogType.CreateGroupChannel]: CreateGroupChannelDialog,\n [DialogType.ChangeToSupergroup]: ChangeToSupergroupDialog,\n [DialogType.ChannelData]: ChannelDataDialog,\n [DialogType.ResourceMetadata]: ResourceMetadataDialog,\n [DialogType.EditChannel]: EditChannelDialog,\n [DialogType.DeleteChannels]: DeleteChannelsDialog,\n [DialogType.AdminMessage]: AdminMessageDialog,\n [DialogType.CreateSDKUser]: CreateSDKUserDialog,\n [DialogType.UpdateSDKUser]: UpdateSDKUserDialog,\n\n [DialogType.EditMessage]: EditMessageDialog,\n [DialogType.DeleteMessage]: DeleteMessageDialog,\n [DialogType.ModeratorInformation]: ModeratorInformationDialog,\n\n [DialogType.BanMuteUser]: BanMuteUserDialog,\n\n [DialogType.CreateUser]: CreateUserDialog,\n [DialogType.DeleteUser]: DeleteUsersDialog,\n [DialogType.DeactivateUser]: DeactivateUserDialog,\n [DialogType.ReactivateUser]: ReactivateUserDialog,\n\n [DialogType.RegisterUserAsOperator]: RegisterUserAsOperatorDialog,\n\n [DialogType.IssueUserAccessToken]: IssueUserAccessTokenDialog,\n\n [DialogType.AnalyticsExport]: AnalyticsExportDialog,\n [DialogType.AnnouncementDataDisplay]: AnnouncementDataDisplayDialog,\n\n [DialogType.PushApnsSave]: PushAPNsSaveDialog,\n [DialogType.PushApnsVoipRegister]: PushAPNSVoIPRegisterDialog,\n [DialogType.PushApnsVoipEdit]: PushAPNSVoIPEditDialog,\n [DialogType.PushFcmSave]: PushFCMSaveDialog,\n\n [DialogType.PushHuaweiSave]: PushHuaweiSaveDialog,\n [DialogType.PushTester]: PushTesterDialog,\n\n [DialogType.UpdateAgentProfile]: UpdateAgentProfileDialog,\n [DialogType.ViewAgentProfile]: ViewAgentProfileDialog,\n [DialogType.SelectTwitterStatusRecipients]: SelectTwitterStatusRecipientsDialog,\n\n [DialogType.ConfirmEndOfChat]: ConfirmEndOfChatDialog,\n [DialogType.AssignTransferTicketToAgent]: AssignTransferTicketToAgentDialog,\n [DialogType.AssignTransferTicketToGroup]: TransferTicketToAgentGroupDialog,\n [DialogType.CreateAgentGroup]: CreateAgentGroupDialog,\n [DialogType.CloseTicket]: CloseTicketDialog,\n [DialogType.ReopenTicket]: ReopenTicketDialog,\n [DialogType.ExportTicket]: ExportTicketDialog,\n [DialogType.ExportTicketsInfo]: ExportTicketsInfoDialog,\n\n [DialogType.CreateNewToken]: CreateTokenDialog,\n\n [DialogType.AddWebhook]: AddWebhookDialog,\n [DialogType.EditWebhook]: EditWebhookDialog,\n [DialogType.DeleteWebhook]: DeleteWebhookDialog,\n\n [DialogType.ReportsExport]: ReportsDataExportDialog,\n\n [DialogType.CreateProactiveChat]: CreateProactiveChatDialog,\n [DialogType.DeleteAgentGroup]: DeleteAgentGroupDialog,\n [DialogType.ManageDirectCallsColumns]: ManageDirectCallsColumnsDialog,\n [DialogType.ExportMissedTicket]: ExportMissedTicketDialog,\n [DialogType.ExportPendingTicket]: ExportPendingTicketDialog,\n [DialogType.ExportDirectCallLogs]: ExportDirectCallLogsDialog,\n [DialogType.PhoneboothUserUnregister]: PhoneboothUserUnregisterDialog,\n [DialogType.DirectCallsDurationLimit]: DirectCallsDurationLimitDialog,\n [DialogType.CreateRoom]: CreateRoomDialog,\n [DialogType.CreateStudioRoom]: CreateStudioRoomDialog,\n [DialogType.DeleteRoom]: DeleteRoomDialog,\n [DialogType.CallsEditCustomItems]: EditCustomItemsDialog,\n [DialogType.CallsCustomItemsColumns]: CustomItemsColumnsDialog,\n [DialogType.CallsStudioRoomInvite]: CallsStudioRoomInviteDialog,\n [DialogType.CallsStudioAddExistingRoom]: CallsStudioAddExistingRoomDialog,\n [DialogType.CallsStudioMobileCreateUser]: CallsStudioMobileCreateUserDialog,\n [DialogType.CallsStudioMobileAddUser]: CallsStudioMobileAddUsersDialog,\n [DialogType.CallsStudioMobileEditUser]: CallsStudioMobileEditUserDialog,\n [DialogType.CallsStudioMobileRemoveUser]: CallsStudioMobileRemoveUserDialog,\n [DialogType.CallsUpdateSubscription]: CallsUpdateSubscriptionDialog,\n [DialogType.CallsDisableSubscription]: CallsDisableSubscriptionDialog,\n [DialogType.CallsPayment]: CallsPaymentDialog,\n [DialogType.CallsRateTooltip]: CallsRateTooltipDialog,\n [DialogType.ChangePlan]: ChangePlanDialog,\n [DialogType.ConvertFreePlan]: ConvertFreePlanDialog,\n [DialogType.AgentConnectionStatusChange]: AgentConnectionStatusChangeDialog,\n [DialogType.AgentActivationStatusChange]: AgentActivationStatusChangeDialog,\n [DialogType.RegexEditor]: RegexEditorDialog,\n [DialogType.DeleteNexmoAccount]: DeleteNexmoAccountDialog,\n [DialogType.IPRestrictionGuide]: IPRestrictionGuideDialog,\n [DialogType.CreateDeskBot]: CreateDeskBotDialog,\n [DialogType.DeactivateDeskBot]: DeactivateDeskBotDialog,\n [DialogType.DeleteDeskBot]: DeleteDeskBotDialog,\n [DialogType.DeskAIPromotion]: DeskAIPromotionDialog,\n [DialogType.CustomerHideTickets]: CustomerSideProfileHideTicketsDialog,\n [DialogType.PreviousChat]: PreviousChatDialog,\n [DialogType.SSOConfig]: SamlSSOConfigDialog,\n [DialogType.DeleteDeskSendbirdMessage]: DeleteDeskSendbirdMessageDialog,\n [DialogType.SessionTimeout]: SessionTimeoutDialog,\n [DialogType.EditQuickReplyCategory]: EditQuickReplyCategoryDialog,\n [DialogType.DeleteQuickReplyCategory]: DeleteQuickReplyCategoryDialog,\n [DialogType.CheckAllRequiredFieldsFilled]: CheckAllRequiredFieldsFilledDialog,\n [DialogType.DeactivateExtensionApp]: DeactivateExtensionAppDialog,\n [DialogType.ToggleExtensionAppStatus]: ToggleExtensionAppStatusDialog,\n [DialogType.AddFlaggedUsers]: AddFlaggedUserDialog,\n [DialogType.DeleteFlaggedUsers]: DeleteFlaggedUserDialog,\n [DialogType.CreateLiveEvent]: CreateLiveEventDialog,\n [DialogType.UseDefaultProfanityKeywords]: UseDefaultProfanityKeywordsDialog,\n [DialogType.DownloadRecording]: DownloadRecordingDialog,\n [DialogType.CreateNotificationTag]: CreateNotificationTagDialog,\n [DialogType.ImportNotificationUsers]: ImportNotificationUsersDialog,\n [DialogType.AiBotEmbedding]: AiBotEmbeddingDialog,\n [DialogType.AiBotKnowledge]: AiBotKnowledgeDialog,\n [DialogType.AiBotSubscription]: AiBotSubscriptionDialog,\n [DialogType.AppSelector]: AppSelectorDialog,\n [DialogType.AiBotStudioPlugin]: AiBotStudioPluginDialog,\n [DialogType.AiFeedback]: AiFeedbackDialog,\n [DialogType.AiEmbedGuide]: AiEmbedGuide,\n [DialogType.UIKitFeatureIntroduction]: UIKitFeatureIntroduction,\n [DialogType.AddHostCandidate]: AddHostCandidateDialog,\n [DialogType.ReleaseModeration]: ReleaseModerationDialog,\n [DialogType.ChannelManager]: ChannelManagerDialog,\n [DialogType.ExportData]: ExportDataDialog,\n [DialogType.FormGuide]: FormGuide,\n [DialogType.FormPreview]: FormPreviewDialog,\n [DialogType.WhatsAppMetadata]: WhatsAppMetadataDialog,\n [DialogType.CopyTemplate]: CopyTemplateDialog,\n [DialogType.CopyTemplateGuide]: CopyTemplateGuideDialog,\n [DialogType.PollDetail]: PollDetailDialog,\n [DialogType.TicketAssignment]: TicketAssignmentDialog,\n [DialogType.ModeratorGroupReassignment]: ModeratorGroupReassignmentDialog,\n [DialogType.DownloadNotificationSandboxApp]: DownloadNotificationSandboxAppDialog,\n [DialogType.AddCustomReportCategory]: AddCustomReportCategoryDialog,\n [DialogType.ReportCategoryUsage]: ReportCategoryUsageDialog,\n [DialogType.KeywordDetectionGroupDelete]: KeywordDetectionGroupDeleteDialog,\n [DialogType.PublishTemplateVersion]: PublishTemplateVersionDialog,\n [DialogType.PreviousTemplateVersion]: PreviousTemplateVersionDialog,\n [DialogType.SaveTemplateChanges]: SaveTemplateChangesDialog,\n [DialogType.RestoreTemplateVersionMethod]: RestoreTemplateVersionMethodDialog,\n [DialogType.TemplateEditInformation]: TemplateEditInformationDialog,\n [DialogType.TemplateEditAddChannels]: TemplateEditAddChannelsDialog,\n [DialogType.TemplateEditUIKitPreset]: TemplateEditUIKitPresetDialog,\n [DialogType.WhatsAppSetup]: WhatsAppSetupDialog,\n [DialogType.KeywordEdit]: KeywordEditDialog,\n [DialogType.AeroCreateUserDialog]: AeroCreateUserDialog,\n [DialogType.AeroDeleteUserDialog]: AeroDeleteUserDialog,\n [DialogType.AeroReactivateUserDialog]: AeroReactivateUserDialog,\n [DialogType.AeroDeactivateUserDialog]: AeroDeactivateUserDialog,\n [DialogType.AeroIssueUserAccessToken]: AeroIssueUserAccessToken,\n [DialogType.CreateSimulate]: CreateSimulateDialog,\n [DialogType.AeroAddKnowledgeSource]: AeroAddKnowledgeSourceDialog,\n [DialogType.BannedPhraseDialog]: BannedPhraseDialog,\n [DialogType.CreateAiAgent]: CreateAiAgentDialog,\n [DialogType.AeroCreateEmailChannelDialog]: AeroCreateEmailChannelDialog,\n};\n","import type { VFC } from 'react';\nimport { Suspense, lazy, useEffect, useMemo, useState } from 'react';\n\nimport type { FallbackProps } from 'react-error-boundary';\nimport { ErrorBoundary } from 'react-error-boundary';\nimport { defineMessages } from 'react-intl';\nimport { css } from 'styled-components';\n\nimport { useDialogs } from '@/redux/hooks/dialogs';\nimport { Subtitles, Typography, cssVariables } from '@feather';\nimport { Button } from '@feather/components/button';\nimport * as Icons from '@feather/components/icons';\nimport { Spinner } from '@feather/components/spinner';\nimport useAppIntl from '@hooks/useAppIntl';\nimport useHideDialog from '@hooks/useHideDialog';\nimport { Dialog } from '@ui/components/dialog';\nimport { Overlay } from '@ui/components/overlay';\n\nimport { dialogComponents } from './dialogComponents';\n\nconst messages = defineMessages({\n errorTitle: { id: 'ui.dialog.error.title' },\n errorBody: { id: 'ui.dialog.error.body' },\n errorBtnRetry: { id: 'ui.dialog.error.btn.retry' },\n} as const);\n\nconst ErrorFallback: VFC = ({ resetErrorBoundary }) => {\n const hideDialog = useHideDialog();\n const intl = useAppIntl();\n\n return (\n h1 {\n margin-top: 12px;\n color: ${cssVariables('content-2')};\n ${Subtitles['subtitle-02']};\n }\n\n > p {\n margin-top: 4px;\n color: ${cssVariables('content-2')};\n ${Typography['caption-01']};\n }\n\n > button {\n margin-top: 24px;\n }\n `}\n >\n \n

{intl.formatMessage(messages.errorTitle)}

\n

{intl.formatMessage(messages.errorBody)}

\n \n \n }\n onClose={hideDialog}\n />\n );\n};\n\nconst DialogLoading = () => {\n const [showLoading, setShowLoading] = useState(false);\n const hideDialog = useHideDialog();\n useEffect(() => {\n const setTimeoutId = setTimeout(() => {\n setShowLoading(true);\n }, 1000);\n return () => {\n clearTimeout(setTimeoutId);\n };\n });\n return showLoading ? (\n }\n styles={css`\n height: 240px;\n `}\n onClose={hideDialog}\n aria-busy=\"true\"\n />\n ) : null;\n};\n\nexport const Dialogs: VFC = () => {\n const hideDialog = useHideDialog();\n const { dialogTypes, dialogProps } = useDialogs((dialogs) => ({\n dialogTypes: dialogs.dialogTypes,\n dialogProps: dialogs.dialogProps,\n }));\n const [lazyComponentKey, setLazyComponentKey] = useState(0);\n\n const preventCloseByESC = 'preventCloseByESC' in dialogProps ? (dialogProps.preventCloseByESC as boolean) : false;\n const overlayZIndex = 'overlayZIndex' in dialogProps ? (dialogProps.overlayZIndex as number) : undefined;\n\n useEffect(() => {\n if (preventCloseByESC) {\n return;\n }\n\n const onEscKeyDown = (event: KeyboardEvent) => {\n if (event.code === 'Escape') {\n hideDialog();\n }\n };\n document.addEventListener('keydown', onEscKeyDown);\n return () => {\n document.removeEventListener('keydown', onEscKeyDown);\n };\n }, [hideDialog, preventCloseByESC]);\n\n const DialogComponent = useMemo(() => {\n const componentOrLazyOptions = dialogComponents[dialogTypes];\n\n if (!componentOrLazyOptions) {\n return null;\n }\n\n if ('importFunc' in componentOrLazyOptions) {\n const importFunc = () => {\n return componentOrLazyOptions.importFunc();\n };\n\n // on `lazyComponentKey` change, importFunc will be redefined to make the component reimported to recover from module loading failure.\n importFunc.key = lazyComponentKey;\n return lazy(importFunc);\n }\n\n return componentOrLazyOptions;\n }, [dialogTypes, lazyComponentKey]);\n\n const dialogComponentProps = { dialogTypes, dialogProps, onClose: hideDialog };\n\n if (!DialogComponent) {\n return null;\n }\n\n return (\n \n setLazyComponentKey(Date.now())}>\n }>\n \n \n \n \n );\n};\n","import { createAction } from '@reduxjs/toolkit';\n\nexport const ImagePreviewActions = {\n showImagePreview: createAction<\n { name: string; type?: string; url: string; thumbnails?: string[]; createdAt?: number }[]\n >('common/imagePreview/showImagePreview'),\n\n hideImagePreview: createAction('common/imagePreview/hideImagePreview'),\n};\n","export const NAVIGATION_BAR_HEIGHT = 48;\nexport const BANNER_HEIGHT = 48;\n","import { useEffect, useState } from 'react';\n\nimport { getDimension } from '@utils';\n\nimport useLatestValue from './useLatestValue';\n\nconst useDimension = () => {\n const [dimension, setDimension] = useState(getDimension());\n const latestDimension = useLatestValue(dimension);\n useEffect(() => {\n const resizeEventListener = () => {\n const newDimension = getDimension();\n if (latestDimension.current.x !== newDimension.x || latestDimension.current.y !== newDimension.y) {\n setDimension(newDimension);\n }\n };\n window.addEventListener('resize', resizeEventListener);\n return () => {\n window.removeEventListener('resize', resizeEventListener);\n };\n }, [latestDimension]);\n\n return dimension;\n};\n\nexport default useDimension;\n","import type { MouseEventHandler } from 'react';\nimport { forwardRef, useCallback, useEffect, useMemo, useRef } from 'react';\n\nimport styled, { css } from 'styled-components';\n\nimport { useDispatch } from '@/redux/hooks';\nimport { useImagePreview } from '@/redux/hooks/imagePreview';\nimport { ImagePreviewActions } from '@common/redux/actions/imagePreview';\nimport { NAVIGATION_BAR_HEIGHT } from '@constants/ui';\nimport * as Icons from '@feather/components/icons';\nimport { Tooltip } from '@feather/components/tooltip';\nimport useDimension from '@hooks/useDimension';\nimport useOrganization from '@hooks/useOrganization';\nimport { Overlay } from '@ui/components/overlay';\nimport { transitionDefault } from '@ui/styles';\n\nconst ImagePreviewContainer = styled.div`\n position: fixed;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n display: flex;\n align-items: center;\n justify-content: center;\n width: 100%;\n min-height: 100%;\n user-select: none;\n`;\n\nconst ImageHolder = styled.div`\n position: static;\n display: flex;\n flex-direction: column;\n user-select: initial;\n margin: auto;\n`;\n\nconst ImageTop = styled.div`\n position: absolute;\n top: 0;\n right: 0;\n left: 0;\n height: ${NAVIGATION_BAR_HEIGHT}px;\n display: flex;\n`;\n\nconst ImageName = styled.div`\n color: white;\n font-size: 14px;\n font-weight: 600;\n flex: 1;\n display: flex;\n align-items: center;\n padding-left: 24px;\n`;\n\nconst ImageMenu = styled.div`\n margin-left: auto;\n display: flex;\n align-items: center;\n`;\n\nconst ImageMenuButton = styled.button`\n display: flex;\n align-items: center;\n justify-content: center;\n transition: background 0.25s ${transitionDefault};\n margin-right: 16px;\n border: 0;\n border-radius: 2px;\n background: transparent;\n cursor: pointer;\n width: 40px;\n height: 40px;\n\n &:hover {\n background: rgba(255, 255, 255, 0.2);\n }\n &:last-child {\n margin-right: 13px;\n }\n`;\n\nconst Images = forwardRef(({ images }, ref) => {\n const dimension = useDimension();\n const maxHeight = dimension.y * 0.78;\n return (\n \n {useMemo(\n () =>\n images.map((image, index) => {\n return (\n \n );\n }),\n [images, maxHeight],\n )}\n \n );\n});\n\nexport const ImagePreview = () => {\n const dispatch = useDispatch();\n\n const imagePreview = useImagePreview();\n const isPreventDownloadFilesEnabled = useOrganization(\n (organization) => organization.attributes?.isDeskSettingsPreventDownloadFilesEnabled,\n );\n\n const hide = useCallback(() => {\n dispatch(ImagePreviewActions.hideImagePreview());\n }, [dispatch]);\n\n useEffect(() => {\n window.addEventListener('popstate', hide);\n return () => {\n window.removeEventListener('popstate', hide);\n };\n }, [hide]);\n\n const holderComponentRef = useRef(null);\n const topComponentRef = useRef(null);\n\n const handleContainerMouseDown: MouseEventHandler = (ev) => {\n const isClickInside =\n (holderComponentRef.current !== null && holderComponentRef.current.contains(ev.target as Node)) ||\n (topComponentRef.current !== null && topComponentRef.current.contains(ev.target as Node));\n\n if (!isClickInside) {\n hide();\n }\n };\n\n const handleClickDownload = (image: ImagePreview) => {\n window.open(image.url);\n };\n\n const isOpen = imagePreview.images.length > 0;\n return (\n \n {isOpen ? (\n \n \n {imagePreview.images[0].name}\n \n {!isPreventDownloadFilesEnabled && (\n \n handleClickDownload(imagePreview.images[0])}>\n \n \n \n )}\n \n \n \n \n \n \n \n \n \n ) : (\n ''\n )}\n \n );\n};\n","import { axios, getDashboardURL } from '@api/shared';\n\ntype GetDashboardAppRecentVersionResponse = { version: string };\n\nexport const getDashboardAppRecentVersion = () =>\n axios.get(`${getDashboardURL()}/dashboard/recent-version`);\n","import { useEffect, useState } from 'react';\n\nimport { useQuery } from '@tanstack/react-query';\n\nimport { getDashboardAppRecentVersion } from '@common/api/app';\nimport { currentDashboardAppVersion, isProduction } from '@constants';\nimport QueryKeyPrefix from '@constants/queryKey';\nimport { toast } from '@feather/components/notification';\n\nimport useAppIntl from './useAppIntl';\n\nconst APP_UPDATE_NOTIFICATION_INTERVAL = 10 * 60 * 1000;\n\nconst useAppUpdateToast = (intervalMs: number = APP_UPDATE_NOTIFICATION_INTERVAL) => {\n const intl = useAppIntl();\n const [enabled, setEnabled] = useState(false);\n\n const { data: { version = null } = {} } = useQuery({\n queryKey: [QueryKeyPrefix.DashboardAppRecentVersion],\n queryFn: async () => {\n try {\n const { data } = await getDashboardAppRecentVersion();\n return data;\n } catch {\n return { version: currentDashboardAppVersion };\n }\n },\n enabled: enabled && isProduction,\n refetchInterval: intervalMs,\n refetchOnWindowFocus: false,\n });\n\n useEffect(() => {\n setEnabled(false);\n const timeout = setTimeout(() => {\n setEnabled(true);\n }, intervalMs);\n\n return () => {\n clearTimeout(timeout);\n };\n }, [intervalMs]);\n\n useEffect(() => {\n const message = intl.formatMessage({ id: 'common.toast.appUpdateAvailable' });\n if (!message || !version || version === currentDashboardAppVersion) {\n return;\n }\n\n toast\n .info({\n message,\n actions: [\n {\n label: 'Refresh',\n onClick: () => {\n location.reload();\n },\n },\n ],\n autoHide: false,\n })\n .catch(() => {});\n setEnabled(false);\n }, [intl, version]);\n};\n\nexport default useAppUpdateToast;\n","import { useAuth } from '../redux/hooks/auth';\n\nconst useAuthRole = () => useAuth((auth) => auth.role);\n\nexport default useAuthRole;\n","import { useContext, useEffect, useMemo } from 'react';\n\nimport isEmpty from 'lodash/isEmpty';\n\nimport { SupportPlanContext } from '@/SupportPlanContext';\nimport { useCurrentChatSubscription } from '@common/containers/CurrentChatSubscriptionProvider';\n\nimport useAuthRole from '../useAuthRole';\nimport useOrganization from '../useOrganization';\nimport useUser from '../useUser';\n\n// https://sendbird.atlassian.net/browse/AC-3037\nexport const gainsightEventNames = {\n whatsNew: 'gnb_button_whats_new',\n\n goToBotSettings: 'onboarding_bot_button_go_to_bot_settings',\n coachMarkGotIt: 'onboarding_bot_coachmark_got_it',\n addToMyShopify: 'shopify_bot_button_add_to_my_shopify',\n formsCreateButtonCreate: 'forms_create_button_create',\n functionCallCreated: 'functioncall_created',\n workflowCreated: 'workflow_created',\n onboardingSuggestedReplyClicked: 'preview_suggested_reply_clicked',\n onboardingUrlInput: 'onboarding_url_input',\n onboardingSkipToBotStudio: 'onboarding_skip_to_bot_studio',\n\n botButtonAddToMyWebsite: 'bot_button_add_to_my_website',\n botButtonApplyChanges: 'bot_button_apply_changes',\n botButtonAITranslation: 'bot_button_ai_translation',\n botButtonPromptInstructions: 'bot_button_prompt_instructions',\n botButtonAddSrc: 'bot_buton_add_source',\n botButtonCrawlAllPages: 'bot_button_crawl_all_pages',\n\n botDivAddKnowledgeSourceUrl: 'bot_div_add_knowledge_source_url',\n botDivAddKnowledgeSourceFile: 'bot_div_add_knowledge_source_file',\n botDivAddKnowledgeSourceQna: 'bot_div_add_knowledge_source_qna',\n botDivAddKnowledgeSourceNotion: 'bot_div_add_knowledge_source_notion',\n botDivAddKnowledgeSourceGoogleDrive: 'bot_div_add_knowledge_source_google_drive',\n botDivAddKnowledgeSourceSalesforce: 'bot_div_add_knowledge_source_salesforce',\n} as const;\n\nexport const sendGainsightEvent = ({\n eventName,\n properties,\n}: {\n eventName: string;\n properties?: Record;\n}) => {\n if (window.aptrinsic == null) {\n return;\n }\n window.aptrinsic('track', eventName, properties);\n};\n\nconst useGainsight = () => {\n const { is_self_serve: isOrgV2 } = useOrganization();\n const { email, first_name, last_name, country_name, join_date } = useUser();\n const role = useAuthRole();\n const organization = useOrganization();\n const safeOrganization = isEmpty(organization) ? null : organization;\n const { uid, name, created_at } = {\n uid: safeOrganization?.uid ?? '',\n name: safeOrganization?.name ?? '',\n created_at: safeOrganization?.created_at ?? '',\n };\n const { isLoaded: isSupportPlanLoaded, current: supportData } = useContext(SupportPlanContext); // supportData can be null\n const { isLoaded: isOrgV2SubscriptionLoaded, currentSubscription: orgV2AccountInfo } = useCurrentChatSubscription();\n\n const skipGain = useMemo(\n () => email === '' || !isSupportPlanLoaded || (isOrgV2 ? !isOrgV2SubscriptionLoaded : false),\n [email, isSupportPlanLoaded, isOrgV2, isOrgV2SubscriptionLoaded],\n );\n\n useEffect(() => {\n if (window.aptrinsic == null || skipGain) {\n return;\n }\n //passing user and account objects:\n window.aptrinsic(\n 'identify',\n {\n // User Fields\n id: email, // Required for logged in app users\n email,\n firstName: first_name,\n lastName: last_name,\n signUpDate: new Date(join_date).valueOf(), //unix time in ms\n // Custom fields\n role: role.name,\n countryName: country_name,\n language: navigator ? navigator.language : 'unknown',\n },\n {\n // Account Fields\n id: uid, // Required\n name,\n createdAt: new Date(created_at).valueOf(),\n customerType: orgV2AccountInfo?.subscription_type ?? '',\n subscriptionName: orgV2AccountInfo?.subscription_name ?? '',\n subscriptionValue: orgV2AccountInfo?.plan_value ?? '',\n supportType: supportData?.display_name ?? '',\n supportValue: supportData?.plan_value ?? 0,\n },\n );\n }, [\n email,\n first_name,\n last_name,\n country_name,\n role,\n uid,\n name,\n created_at,\n orgV2AccountInfo,\n supportData,\n skipGain,\n join_date,\n ]);\n\n return null;\n};\n\n// Initialized as a React Component because it needs to be under SupportPlanContextProvider.\nconst GainsightInitializer = () => {\n useGainsight();\n return null;\n};\n\nexport default GainsightInitializer;\n","import { useCallback, useEffect } from 'react';\n\nimport { useLocation } from '@/router';\n\nimport useHideDialog from '../useHideDialog';\n\ntype Props = {\n onLocationChange: () => void;\n};\n\nconst useListenLocationPathChange = (props?: Props) => {\n const hideDialog = useHideDialog();\n const location = useLocation();\n const handleLocationChange = useCallback(() => {\n props?.onLocationChange();\n }, [props]);\n\n useEffect(() => {\n window.addEventListener('popstate', hideDialog);\n return () => {\n window.removeEventListener('popstate', hideDialog);\n };\n }, [hideDialog]);\n\n useEffect(() => {\n handleLocationChange();\n }, [handleLocationChange, location.pathname]);\n};\n\nexport default useListenLocationPathChange;\n","export const drawerTransitionDurationSecond = 0.2;\n","import { createContext } from 'react';\n\ninterface DrawerContextValue {\n activeDrawerID: string | null;\n drawerState?: Record;\n openDrawer(id: string, drawerState?: DrawerContextValue['drawerState']): void;\n closeDrawer(id?: string): void;\n}\n\nexport const DrawerContext = createContext({\n activeDrawerID: null,\n openDrawer: () => {},\n closeDrawer: () => {},\n});\n","import type { ReactNode } from 'react';\nimport React, { useCallback, useMemo, useState } from 'react';\n\nimport { DrawerContext } from './drawerContext';\n\n// To transfer state to active drawer component.\ntype DrawerState = Record;\n\nexport const DrawerContextProvider: React.FC<{ children: ReactNode }> = ({ children }) => {\n const [activeDrawerID, setActiveDrawerID] = useState(null);\n const [drawerState, setDrawerState] = useState(undefined);\n\n const openDrawer = useCallback((id: string | null, state?: DrawerState) => {\n if (state != null) {\n setDrawerState(state);\n }\n setActiveDrawerID(id);\n }, []);\n\n return (\n {\n const closeDrawer = (id?: string) => {\n if (!id || id === activeDrawerID) {\n setActiveDrawerID(null);\n setDrawerState(undefined);\n }\n };\n\n return {\n activeDrawerID,\n drawerState,\n openDrawer,\n closeDrawer,\n };\n }, [activeDrawerID, drawerState, openDrawer])}\n >\n {children}\n \n );\n};\n","import { useContext, useMemo } from 'react';\n\nimport { DrawerContext } from './drawerContext';\n\nexport const useDrawer = >() => {\n const { drawerState, ...values } = useContext(DrawerContext);\n\n return useMemo(\n () => ({\n drawerState: drawerState as T | undefined,\n ...values,\n }),\n [drawerState, values],\n );\n};\n","import type { ReactNode } from 'react';\nimport { forwardRef, useEffect, useState } from 'react';\n\nimport styled, { css } from 'styled-components';\n\nimport { NAVIGATION_BAR_HEIGHT } from '@constants/ui';\nimport { cssVariables, shadow, transitionDefault } from '@feather';\nimport { ZIndexes } from '@ui/zIndexes';\n\nimport { Portal } from '../portal';\nimport { drawerTransitionDurationSecond } from './constants';\nimport { useDrawer } from './useDrawer';\n\ntype Props = {\n id: string;\n className?: string;\n children?: ReactNode;\n isFullHeight?: boolean;\n isDarkBackground?: boolean;\n};\n\nconst Container = styled.div<{ isOpen: boolean; isFullHeight: Props['isFullHeight'] }>`\n position: fixed;\n right: ${({ isOpen }) => (isOpen ? '0' : '-16px')};\n bottom: 0;\n max-width: 100%;\n background: white;\n transform: translateX(${({ isOpen }) => (isOpen ? 0 : '100%')});\n transition: ${drawerTransitionDurationSecond}s ${transitionDefault};\n transition-property: transform, box-shadow;\n z-index: ${ZIndexes.drawer};\n\n ${({ isOpen }) => isOpen && shadow[12]}\n ${({ isFullHeight }) =>\n css`\n top: ${isFullHeight ? 0 : NAVIGATION_BAR_HEIGHT}px;\n height: ${isFullHeight ? '100%' : `calc(100% - ${NAVIGATION_BAR_HEIGHT}px)`};\n `}\n`;\n\nconst Background = styled.div<{ isOpen: boolean }>`\n position: fixed;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n width: 100%;\n height: 100%;\n z-index: ${ZIndexes.drawerBackground};\n background: ${({ isOpen }) => (isOpen ? cssVariables('bg-overlay-4') : 'rgba(0,0,0,0)')};\n transition: background 0.3s ${transitionDefault};\n`;\n\nexport const Drawer = forwardRef(\n ({ id, children, className, isFullHeight, isDarkBackground }, ref) => {\n const { activeDrawerID } = useDrawer();\n const [isTransitioned, setIsTransitioned] = useState(false);\n const isOpen = id === activeDrawerID;\n\n useEffect(() => {\n if (isOpen) {\n const setTimeoutId = setTimeout(() => {\n setIsTransitioned(true);\n }, drawerTransitionDurationSecond * 1000);\n return () => {\n clearTimeout(setTimeoutId);\n };\n }\n\n if (isTransitioned) {\n const setTimeoutId = setTimeout(() => {\n setIsTransitioned(false);\n }, drawerTransitionDurationSecond * 1000);\n return () => {\n clearTimeout(setTimeoutId);\n };\n }\n }, [isOpen, isTransitioned]);\n\n if (!isOpen && !isTransitioned) {\n return null;\n }\n\n return (\n \n \n {children}\n \n {isDarkBackground && }\n \n );\n },\n);\n","import { Suspense, useEffect } from 'react';\n\nimport '@stripe/stripe-js';\nimport 'element-scroll-polyfill';\nimport { useIntl } from 'react-intl';\n\nimport { SubscriptionInfoContextProvider } from '@/SubscriptionInfoContext';\nimport { SupportPlanContextProvider } from '@/SupportPlanContext';\nimport { useDispatch } from '@/redux/hooks';\nimport { useImagePreview } from '@/redux/hooks/imagePreview';\nimport { Outlet } from '@/router';\nimport useSentryApplicationTracker from '@/useSentryApplicationTracker';\nimport useSentryUserTracker from '@/useSentryUserTracker';\nimport { CallsVoucherProvider } from '@common/containers/CallsVoucherContext';\nimport { CurrentChatSubscriptionProvider } from '@common/containers/CurrentChatSubscriptionProvider';\nimport { FullScreenModals } from '@common/containers/FullScreenModals';\nimport { Dialogs } from '@common/containers/dialogs';\nimport { ImagePreview } from '@common/containers/imagePreview';\nimport { ImagePreviewActions } from '@common/redux/actions/imagePreview';\nimport useAppUpdateToast from '@hooks/useAppUpdateToast';\nimport GainsightInitializer from '@hooks/useGainsight';\nimport useListenLocationPathChange from '@hooks/useListenLocationPathChange';\nimport { FullScreenModalContextProvider } from '@ui/components/FullScreenModal/context';\nimport { DrawerContextProvider } from '@ui/components/drawer';\n\nconst useImagePreviewEscKeyHandler = () => {\n const isImagePreviewVisible = useImagePreview((imagePreview) => imagePreview.images.length > 0);\n const dispatch = useDispatch();\n useEffect(() => {\n if (isImagePreviewVisible) {\n const onEscKeyDown = (event: KeyboardEvent) => {\n if (event.key === 'Escape') {\n dispatch(ImagePreviewActions.hideImagePreview());\n }\n };\n document.addEventListener('keydown', onEscKeyDown);\n return () => {\n document.removeEventListener('keydown', onEscKeyDown);\n };\n }\n });\n};\n\nconst useUpdateWindowIntl = () => {\n const intl = useIntl();\n useEffect(() => {\n window.intl = intl;\n }, [intl]);\n};\n\nconst RootLayout = () => {\n useImagePreviewEscKeyHandler();\n useUpdateWindowIntl();\n useSentryUserTracker();\n useSentryApplicationTracker();\n useListenLocationPathChange();\n useAppUpdateToast();\n\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n );\n};\n\nexport default RootLayout;\n","import { Suspense, lazy } from 'react';\n\nimport { Navigate, Route, Routes, createRoutesFromElements } from 'react-router-dom';\n\nimport config from '@/config';\nimport { Outlet, createBrowserRouter } from '@/router';\nimport InvitationTokensRedirect from '@common/containers/InvitationTokensRedirect';\nimport RouteErrorBoundary from '@common/containers/RouteErrorBoundary';\nimport RootLayout from '@common/containers/layout/RootLayout';\nimport { SpinnerFull } from '@feather/components/spinner/spinnerFull';\n\nconst { BUILD_MODE } = config;\n\nconst SettingsRoutes = lazy(() => import('@common/containers/settings/settingsRoutes'));\n\nconst AuthRoute = lazy(() => import('./AuthRoute'));\nconst GuideToDesktop = lazy(() => import('@common/containers/GuideToDesktop'));\nconst Integrations = lazy(() => import('./integrations'));\nconst NavigationLayout = lazy(() => import('@common/containers/layout/navigationLayout'));\nconst Activate = lazy(() => import('@common/containers/Activate'));\nconst App = lazy(() => import('@core/containers/app'));\nconst Auth = lazy(() => import('@common/containers/auth'));\nconst AwsMarketplace = lazy(() => import('@common/containers/AwsMarketplace'));\nconst Home = lazy(() => import('@common/containers/home'));\nconst Onboarding = lazy(() => import('@common/containers/Onboarding'));\nconst AIChatbotOnboarding = lazy(() => import('@chat/aibots/containers/Onboarding'));\nconst AIChatbotOnboardingV2 = lazy(() => import('@chat/aibots/containers/OnboardingV2'));\nconst AIChatbotWidgetPreview = lazy(() => import('@chat/aibots/containers/WidgetPreview'));\nconst OrganizationStatusScreen = lazy(() => import('@common/containers/home/OrganizationStatusScreen'));\nconst PageNotFound = lazy(() => import('@common/containers/PageNotFound'));\n\nconst CreateOrganization = lazy(() => import('@common/containers/Onboarding/CreateOrganization'));\nconst CreateApplication = lazy(() => import('@common/containers/Onboarding/CreateApplication'));\n\nconst Account = lazy(() => import('@common/containers/account'));\nconst AccountProfile = lazy(() => import('@common/containers/account/profile'));\nconst AccountSecurity = lazy(() => import('@common/containers/account/security'));\n\n/* Org settings */\nconst Settings = lazy(() => import('@common/containers/settings'));\nconst SignInWithSso = lazy(() => import('@common/containers/auth/signInWithSso'));\n\nconst Aero = lazy(() => import('@aero/index'));\n\nconst AppRoutes = () => {\n return (\n \n \n } />\n \n }>\n \n \n \n \n }\n >\n \n } />\n } />\n \n\n } />\n } />\n \n } />\n } />\n \n }>\n } />\n } />\n } />\n \n }>\n } />\n }>\n } />\n } />\n } />\n \n }>\n } />\n \n } />\n } />\n \n \n \n );\n};\n\n/** @knipignore */\nexport const routes = createRoutesFromElements(\n } errorElement={}>\n } />\n } />\n {/* Task key: INVITATION_TOKEN_BINDER_FOR_AMPLIFY */}\n {/* Globally search with the task key above to find related code */}\n {BUILD_MODE !== 'production' && } />}\n } />\n } /> {/* Auth0 redirects user to this route not /auth/sso */}\n } />\n } />\n } />\n ,\n);\n\nexport const browserRouter = createBrowserRouter(routes);\n","/*!\n* chartjs-plugin-annotation v2.2.1\n* https://www.chartjs.org/chartjs-plugin-annotation/index\n * (c) 2023 chartjs-plugin-annotation Contributors\n * Released under the MIT License\n */\nimport { Element, defaults, Animations, Chart } from 'chart.js';\nimport { distanceBetweenPoints, isObject, valueOrDefault, defined, callback, isFunction, toRadians, isArray, toFont, addRoundedRectPath, toTRBLCorners, QUARTER_PI, PI, HALF_PI, TWO_THIRDS_PI, TAU, isNumber, RAD_PER_DEG, toPadding, isFinite, toDegrees, clipArea, unclipArea } from 'chart.js/helpers';\n\n/**\n * @typedef { import(\"chart.js\").ChartEvent } ChartEvent\n * @typedef { import('../../types/element').AnnotationElement } AnnotationElement\n */\n\nconst interaction = {\n modes: {\n /**\n * Point mode returns all elements that hit test based on the event position\n * @param {Object} state - the state of the plugin\n * @param {ChartEvent} event - the event we are find things at\n * @return {AnnotationElement[]} - elements that are found\n */\n point(state, event) {\n return filterElements(state, event, {intersect: true});\n },\n\n /**\n * Nearest mode returns the element closest to the event position\n * @param {Object} state - the state of the plugin\n * @param {ChartEvent} event - the event we are find things at\n * @param {Object} options - interaction options to use\n * @return {AnnotationElement[]} - elements that are found (only 1 element)\n */\n nearest(state, event, options) {\n return getNearestItem(state, event, options);\n },\n /**\n * x mode returns the elements that hit-test at the current x coordinate\n * @param {Object} state - the state of the plugin\n * @param {ChartEvent} event - the event we are find things at\n * @param {Object} options - interaction options to use\n * @return {AnnotationElement[]} - elements that are found\n */\n x(state, event, options) {\n return filterElements(state, event, {intersect: options.intersect, axis: 'x'});\n },\n\n /**\n * y mode returns the elements that hit-test at the current y coordinate\n * @param {Object} state - the state of the plugin\n * @param {ChartEvent} event - the event we are find things at\n * @param {Object} options - interaction options to use\n * @return {AnnotationElement[]} - elements that are found\n */\n y(state, event, options) {\n return filterElements(state, event, {intersect: options.intersect, axis: 'y'});\n }\n }\n};\n\n/**\n * Returns all elements that hit test based on the event position\n * @param {Object} state - the state of the plugin\n * @param {ChartEvent} event - the event we are find things at\n * @param {Object} options - interaction options to use\n * @return {AnnotationElement[]} - elements that are found\n */\nfunction getElements(state, event, options) {\n const mode = interaction.modes[options.mode] || interaction.modes.nearest;\n return mode(state, event, options);\n}\n\nfunction inRangeByAxis(element, event, axis) {\n if (axis !== 'x' && axis !== 'y') {\n return element.inRange(event.x, event.y, 'x', true) || element.inRange(event.x, event.y, 'y', true);\n }\n return element.inRange(event.x, event.y, axis, true);\n}\n\nfunction getPointByAxis(event, center, axis) {\n if (axis === 'x') {\n return {x: event.x, y: center.y};\n } else if (axis === 'y') {\n return {x: center.x, y: event.y};\n }\n return center;\n}\n\nfunction filterElements(state, event, options) {\n return state.visibleElements.filter((element) => options.intersect ? element.inRange(event.x, event.y) : inRangeByAxis(element, event, options.axis));\n}\n\nfunction getNearestItem(state, event, options) {\n let minDistance = Number.POSITIVE_INFINITY;\n\n return filterElements(state, event, options)\n .reduce((nearestItems, element) => {\n const center = element.getCenterPoint();\n const evenPoint = getPointByAxis(event, center, options.axis);\n const distance = distanceBetweenPoints(event, evenPoint);\n if (distance < minDistance) {\n nearestItems = [element];\n minDistance = distance;\n } else if (distance === minDistance) {\n // Can have multiple items at the same distance in which case we sort by size\n nearestItems.push(element);\n }\n\n return nearestItems;\n }, [])\n .sort((a, b) => a._index - b._index)\n .slice(0, 1); // return only the top item;\n}\n\nconst isOlderPart = (act, req) => req > act || (act.length > req.length && act.slice(0, req.length) === req);\n\n/**\n * @typedef { import('chart.js').Point } Point\n * @typedef { import('chart.js').InteractionAxis } InteractionAxis\n * @typedef { import('../../types/element').AnnotationElement } AnnotationElement\n */\n\nconst EPSILON = 0.001;\nconst clamp = (x, from, to) => Math.min(to, Math.max(from, x));\n\n/**\n * @param {Object} obj\n * @param {number} from\n * @param {number} to\n * @returns {Object}\n */\nfunction clampAll(obj, from, to) {\n for (const key of Object.keys(obj)) {\n obj[key] = clamp(obj[key], from, to);\n }\n return obj;\n}\n\n/**\n * @param {Point} point\n * @param {Point} center\n * @param {number} radius\n * @param {number} borderWidth\n * @returns {boolean}\n */\nfunction inPointRange(point, center, radius, borderWidth) {\n if (!point || !center || radius <= 0) {\n return false;\n }\n const hBorderWidth = borderWidth / 2;\n return (Math.pow(point.x - center.x, 2) + Math.pow(point.y - center.y, 2)) <= Math.pow(radius + hBorderWidth, 2);\n}\n\n/**\n * @param {Point} point\n * @param {{x: number, y: number, x2: number, y2: number}} rect\n * @param {InteractionAxis} axis\n * @param {number} borderWidth\n * @returns {boolean}\n */\nfunction inBoxRange(point, {x, y, x2, y2}, axis, borderWidth) {\n const hBorderWidth = borderWidth / 2;\n const inRangeX = point.x >= x - hBorderWidth - EPSILON && point.x <= x2 + hBorderWidth + EPSILON;\n const inRangeY = point.y >= y - hBorderWidth - EPSILON && point.y <= y2 + hBorderWidth + EPSILON;\n if (axis === 'x') {\n return inRangeX;\n } else if (axis === 'y') {\n return inRangeY;\n }\n return inRangeX && inRangeY;\n}\n\n/**\n * @param {AnnotationElement} element\n * @param {boolean} useFinalPosition\n * @returns {Point}\n */\nfunction getElementCenterPoint(element, useFinalPosition) {\n const {centerX, centerY} = element.getProps(['centerX', 'centerY'], useFinalPosition);\n return {x: centerX, y: centerY};\n}\n\n/**\n * @param {string} pkg\n * @param {string} min\n * @param {string} ver\n * @param {boolean} [strict=true]\n * @returns {boolean}\n */\nfunction requireVersion(pkg, min, ver, strict = true) {\n const parts = ver.split('.');\n let i = 0;\n for (const req of min.split('.')) {\n const act = parts[i++];\n if (parseInt(req, 10) < parseInt(act, 10)) {\n break;\n }\n if (isOlderPart(act, req)) {\n if (strict) {\n throw new Error(`${pkg} v${ver} is not supported. v${min} or newer is required.`);\n } else {\n return false;\n }\n }\n }\n return true;\n}\n\nconst isPercentString = (s) => typeof s === 'string' && s.endsWith('%');\nconst toPercent = (s) => parseFloat(s) / 100;\nconst toPositivePercent = (s) => clamp(toPercent(s), 0, 1);\n\n/**\n * @typedef { import(\"chart.js\").Chart } Chart\n * @typedef { import('../../types/element').AnnotationBoxModel } AnnotationBoxModel\n * @typedef { import('../../types/options').AnnotationPointCoordinates } AnnotationPointCoordinates\n * @typedef { import('../../types/label').CoreLabelOptions } CoreLabelOptions\n * @typedef { import('../../types/label').LabelPositionObject } LabelPositionObject\n */\n\n/**\n * @param {number} size\n * @param {number|string} position\n * @returns {number}\n */\nfunction getRelativePosition(size, position) {\n if (position === 'start') {\n return 0;\n }\n if (position === 'end') {\n return size;\n }\n if (isPercentString(position)) {\n return toPositivePercent(position) * size;\n }\n return size / 2;\n}\n\n/**\n * @param {number} size\n * @param {number|string} value\n * @param {boolean} [positivePercent=true]\n * @returns {number}\n */\nfunction getSize(size, value, positivePercent = true) {\n if (typeof value === 'number') {\n return value;\n } else if (isPercentString(value)) {\n return (positivePercent ? toPositivePercent(value) : toPercent(value)) * size;\n }\n return size;\n}\n\n/**\n * @param {{x: number, width: number}} size\n * @param {CoreLabelOptions} options\n * @returns {number}\n */\nfunction calculateTextAlignment(size, options) {\n const {x, width} = size;\n const textAlign = options.textAlign;\n if (textAlign === 'center') {\n return x + width / 2;\n } else if (textAlign === 'end' || textAlign === 'right') {\n return x + width;\n }\n return x;\n}\n\n/**\n * @param {{x: number|string, y: number|string}|string|number} value\n * @param {string|number} defaultValue\n * @returns {{x: number|string, y: number|string}}\n */\nfunction toPosition(value, defaultValue = 'center') {\n if (isObject(value)) {\n return {\n x: valueOrDefault(value.x, defaultValue),\n y: valueOrDefault(value.y, defaultValue),\n };\n }\n value = valueOrDefault(value, defaultValue);\n return {\n x: value,\n y: value\n };\n}\n\n/**\n * @param {AnnotationPointCoordinates} options\n * @returns {boolean}\n */\nfunction isBoundToPoint(options) {\n return options && (defined(options.xValue) || defined(options.yValue));\n}\n\n/**\n * @param {Chart} chart\n * @param {AnnotationBoxModel} properties\n * @param {CoreAnnotationOptions} options\n * @param {boolean} [centerBased=false]\n * @returns {AnnotationBoxModel}\n */\nfunction initAnimationProperties(chart, properties, options, centerBased = false) {\n const initAnim = options.init;\n if (!initAnim) {\n return;\n } else if (initAnim === true) {\n return applyDefault(properties, centerBased);\n }\n return checkCallbackResult(properties, centerBased, callback(initAnim, [{chart, properties, options}]));\n}\n\n/**\n * @param {Object} options\n * @param {Array} hooks\n * @param {Object} hooksContainer\n * @returns {boolean}\n */\nfunction loadHooks(options, hooks, hooksContainer) {\n let activated = false;\n hooks.forEach(hook => {\n if (isFunction(options[hook])) {\n activated = true;\n hooksContainer[hook] = options[hook];\n } else if (defined(hooksContainer[hook])) {\n delete hooksContainer[hook];\n }\n });\n return activated;\n}\n\nfunction applyDefault({centerX, centerY}, centerBased) {\n if (centerBased) {\n return {centerX, centerY, radius: 0, width: 0, height: 0};\n }\n return {x: centerX, y: centerY, x2: centerX, y2: centerY, width: 0, height: 0};\n}\n\nfunction checkCallbackResult(properties, centerBased, result) {\n if (result === true) {\n return applyDefault(properties, centerBased);\n } else if (isObject(result)) {\n return result;\n }\n}\n\nconst widthCache = new Map();\nconst notRadius = (radius) => isNaN(radius) || radius <= 0;\nconst fontsKey = (fonts) => fonts.reduce(function(prev, item) {\n prev += item.string;\n return prev;\n}, '');\n\n/**\n * @typedef { import('chart.js').Point } Point\n * @typedef { import('../../types/label').CoreLabelOptions } CoreLabelOptions\n * @typedef { import('../../types/options').PointAnnotationOptions } PointAnnotationOptions\n */\n\n/**\n * Determine if content is an image or a canvas.\n * @param {*} content\n * @returns boolean|undefined\n * @todo move this function to chart.js helpers\n */\nfunction isImageOrCanvas(content) {\n if (content && typeof content === 'object') {\n const type = content.toString();\n return (type === '[object HTMLImageElement]' || type === '[object HTMLCanvasElement]');\n }\n}\n\n/**\n * Set the translation on the canvas if the rotation must be applied.\n * @param {CanvasRenderingContext2D} ctx - chart canvas context\n * @param {Point} point - the point of translation\n * @param {number} rotation - rotation (in degrees) to apply\n */\nfunction translate(ctx, {x, y}, rotation) {\n if (rotation) {\n ctx.translate(x, y);\n ctx.rotate(toRadians(rotation));\n ctx.translate(-x, -y);\n }\n}\n\n/**\n * @param {CanvasRenderingContext2D} ctx\n * @param {Object} options\n * @returns {boolean|undefined}\n */\nfunction setBorderStyle(ctx, options) {\n if (options && options.borderWidth) {\n ctx.lineCap = options.borderCapStyle;\n ctx.setLineDash(options.borderDash);\n ctx.lineDashOffset = options.borderDashOffset;\n ctx.lineJoin = options.borderJoinStyle;\n ctx.lineWidth = options.borderWidth;\n ctx.strokeStyle = options.borderColor;\n return true;\n }\n}\n\n/**\n * @param {CanvasRenderingContext2D} ctx\n * @param {Object} options\n */\nfunction setShadowStyle(ctx, options) {\n ctx.shadowColor = options.backgroundShadowColor;\n ctx.shadowBlur = options.shadowBlur;\n ctx.shadowOffsetX = options.shadowOffsetX;\n ctx.shadowOffsetY = options.shadowOffsetY;\n}\n\n/**\n * @param {CanvasRenderingContext2D} ctx\n * @param {CoreLabelOptions} options\n * @returns {{width: number, height: number}}\n */\nfunction measureLabelSize(ctx, options) {\n const content = options.content;\n if (isImageOrCanvas(content)) {\n return {\n width: getSize(content.width, options.width),\n height: getSize(content.height, options.height)\n };\n }\n const optFont = options.font;\n const fonts = isArray(optFont) ? optFont.map(f => toFont(f)) : [toFont(optFont)];\n const strokeWidth = options.textStrokeWidth;\n const lines = isArray(content) ? content : [content];\n const mapKey = lines.join() + fontsKey(fonts) + strokeWidth + (ctx._measureText ? '-spriting' : '');\n if (!widthCache.has(mapKey)) {\n widthCache.set(mapKey, calculateLabelSize(ctx, lines, fonts, strokeWidth));\n }\n return widthCache.get(mapKey);\n}\n\n/**\n * @param {CanvasRenderingContext2D} ctx\n * @param {{x: number, y: number, width: number, height: number}} rect\n * @param {Object} options\n */\nfunction drawBox(ctx, rect, options) {\n const {x, y, width, height} = rect;\n ctx.save();\n setShadowStyle(ctx, options);\n const stroke = setBorderStyle(ctx, options);\n ctx.fillStyle = options.backgroundColor;\n ctx.beginPath();\n addRoundedRectPath(ctx, {\n x, y, w: width, h: height,\n radius: clampAll(toTRBLCorners(options.borderRadius), 0, Math.min(width, height) / 2)\n });\n ctx.closePath();\n ctx.fill();\n if (stroke) {\n ctx.shadowColor = options.borderShadowColor;\n ctx.stroke();\n }\n ctx.restore();\n}\n\n/**\n * @param {CanvasRenderingContext2D} ctx\n * @param {{x: number, y: number, width: number, height: number}} rect\n * @param {CoreLabelOptions} options\n */\nfunction drawLabel(ctx, rect, options) {\n const content = options.content;\n if (isImageOrCanvas(content)) {\n ctx.save();\n ctx.globalAlpha = getOpacity(options.opacity, content.style.opacity);\n ctx.drawImage(content, rect.x, rect.y, rect.width, rect.height);\n ctx.restore();\n return;\n }\n const labels = isArray(content) ? content : [content];\n const optFont = options.font;\n const fonts = isArray(optFont) ? optFont.map(f => toFont(f)) : [toFont(optFont)];\n const optColor = options.color;\n const colors = isArray(optColor) ? optColor : [optColor];\n const x = calculateTextAlignment(rect, options);\n const y = rect.y + options.textStrokeWidth / 2;\n ctx.save();\n ctx.textBaseline = 'middle';\n ctx.textAlign = options.textAlign;\n if (setTextStrokeStyle(ctx, options)) {\n applyLabelDecoration(ctx, {x, y}, labels, fonts);\n }\n applyLabelContent(ctx, {x, y}, labels, {fonts, colors});\n ctx.restore();\n}\n\nfunction setTextStrokeStyle(ctx, options) {\n if (options.textStrokeWidth > 0) {\n // https://stackoverflow.com/questions/13627111/drawing-text-with-an-outer-stroke-with-html5s-canvas\n ctx.lineJoin = 'round';\n ctx.miterLimit = 2;\n ctx.lineWidth = options.textStrokeWidth;\n ctx.strokeStyle = options.textStrokeColor;\n return true;\n }\n}\n\n/**\n * @param {CanvasRenderingContext2D} ctx\n * @param {{radius: number, options: PointAnnotationOptions}} element\n * @param {number} x\n * @param {number} y\n */\nfunction drawPoint(ctx, element, x, y) {\n const {radius, options} = element;\n const style = options.pointStyle;\n const rotation = options.rotation;\n let rad = (rotation || 0) * RAD_PER_DEG;\n\n if (isImageOrCanvas(style)) {\n ctx.save();\n ctx.translate(x, y);\n ctx.rotate(rad);\n ctx.drawImage(style, -style.width / 2, -style.height / 2, style.width, style.height);\n ctx.restore();\n return;\n }\n if (notRadius(radius)) {\n return;\n }\n drawPointStyle(ctx, {x, y, radius, rotation, style, rad});\n}\n\nfunction drawPointStyle(ctx, {x, y, radius, rotation, style, rad}) {\n let xOffset, yOffset, size, cornerRadius;\n ctx.beginPath();\n\n switch (style) {\n // Default includes circle\n default:\n ctx.arc(x, y, radius, 0, TAU);\n ctx.closePath();\n break;\n case 'triangle':\n ctx.moveTo(x + Math.sin(rad) * radius, y - Math.cos(rad) * radius);\n rad += TWO_THIRDS_PI;\n ctx.lineTo(x + Math.sin(rad) * radius, y - Math.cos(rad) * radius);\n rad += TWO_THIRDS_PI;\n ctx.lineTo(x + Math.sin(rad) * radius, y - Math.cos(rad) * radius);\n ctx.closePath();\n break;\n case 'rectRounded':\n // NOTE: the rounded rect implementation changed to use `arc` instead of\n // `quadraticCurveTo` since it generates better results when rect is\n // almost a circle. 0.516 (instead of 0.5) produces results with visually\n // closer proportion to the previous impl and it is inscribed in the\n // circle with `radius`. For more details, see the following PRs:\n // https://github.com/chartjs/Chart.js/issues/5597\n // https://github.com/chartjs/Chart.js/issues/5858\n cornerRadius = radius * 0.516;\n size = radius - cornerRadius;\n xOffset = Math.cos(rad + QUARTER_PI) * size;\n yOffset = Math.sin(rad + QUARTER_PI) * size;\n ctx.arc(x - xOffset, y - yOffset, cornerRadius, rad - PI, rad - HALF_PI);\n ctx.arc(x + yOffset, y - xOffset, cornerRadius, rad - HALF_PI, rad);\n ctx.arc(x + xOffset, y + yOffset, cornerRadius, rad, rad + HALF_PI);\n ctx.arc(x - yOffset, y + xOffset, cornerRadius, rad + HALF_PI, rad + PI);\n ctx.closePath();\n break;\n case 'rect':\n if (!rotation) {\n size = Math.SQRT1_2 * radius;\n ctx.rect(x - size, y - size, 2 * size, 2 * size);\n break;\n }\n rad += QUARTER_PI;\n /* falls through */\n case 'rectRot':\n xOffset = Math.cos(rad) * radius;\n yOffset = Math.sin(rad) * radius;\n ctx.moveTo(x - xOffset, y - yOffset);\n ctx.lineTo(x + yOffset, y - xOffset);\n ctx.lineTo(x + xOffset, y + yOffset);\n ctx.lineTo(x - yOffset, y + xOffset);\n ctx.closePath();\n break;\n case 'crossRot':\n rad += QUARTER_PI;\n /* falls through */\n case 'cross':\n xOffset = Math.cos(rad) * radius;\n yOffset = Math.sin(rad) * radius;\n ctx.moveTo(x - xOffset, y - yOffset);\n ctx.lineTo(x + xOffset, y + yOffset);\n ctx.moveTo(x + yOffset, y - xOffset);\n ctx.lineTo(x - yOffset, y + xOffset);\n break;\n case 'star':\n xOffset = Math.cos(rad) * radius;\n yOffset = Math.sin(rad) * radius;\n ctx.moveTo(x - xOffset, y - yOffset);\n ctx.lineTo(x + xOffset, y + yOffset);\n ctx.moveTo(x + yOffset, y - xOffset);\n ctx.lineTo(x - yOffset, y + xOffset);\n rad += QUARTER_PI;\n xOffset = Math.cos(rad) * radius;\n yOffset = Math.sin(rad) * radius;\n ctx.moveTo(x - xOffset, y - yOffset);\n ctx.lineTo(x + xOffset, y + yOffset);\n ctx.moveTo(x + yOffset, y - xOffset);\n ctx.lineTo(x - yOffset, y + xOffset);\n break;\n case 'line':\n xOffset = Math.cos(rad) * radius;\n yOffset = Math.sin(rad) * radius;\n ctx.moveTo(x - xOffset, y - yOffset);\n ctx.lineTo(x + xOffset, y + yOffset);\n break;\n case 'dash':\n ctx.moveTo(x, y);\n ctx.lineTo(x + Math.cos(rad) * radius, y + Math.sin(rad) * radius);\n break;\n }\n\n ctx.fill();\n}\n\nfunction calculateLabelSize(ctx, lines, fonts, strokeWidth) {\n ctx.save();\n const count = lines.length;\n let width = 0;\n let height = strokeWidth;\n for (let i = 0; i < count; i++) {\n const font = fonts[Math.min(i, fonts.length - 1)];\n ctx.font = font.string;\n const text = lines[i];\n width = Math.max(width, ctx.measureText(text).width + strokeWidth);\n height += font.lineHeight;\n }\n ctx.restore();\n return {width, height};\n}\n\nfunction applyLabelDecoration(ctx, {x, y}, labels, fonts) {\n ctx.beginPath();\n let lhs = 0;\n labels.forEach(function(l, i) {\n const f = fonts[Math.min(i, fonts.length - 1)];\n const lh = f.lineHeight;\n ctx.font = f.string;\n ctx.strokeText(l, x, y + lh / 2 + lhs);\n lhs += lh;\n });\n ctx.stroke();\n}\n\nfunction applyLabelContent(ctx, {x, y}, labels, {fonts, colors}) {\n let lhs = 0;\n labels.forEach(function(l, i) {\n const c = colors[Math.min(i, colors.length - 1)];\n const f = fonts[Math.min(i, fonts.length - 1)];\n const lh = f.lineHeight;\n ctx.beginPath();\n ctx.font = f.string;\n ctx.fillStyle = c;\n ctx.fillText(l, x, y + lh / 2 + lhs);\n lhs += lh;\n ctx.fill();\n });\n}\n\nfunction getOpacity(value, elementValue) {\n const opacity = isNumber(value) ? value : elementValue;\n return isNumber(opacity) ? clamp(opacity, 0, 1) : 1;\n}\n\nconst limitedLineScale = {\n xScaleID: {min: 'xMin', max: 'xMax', start: 'left', end: 'right', startProp: 'x', endProp: 'x2'},\n yScaleID: {min: 'yMin', max: 'yMax', start: 'bottom', end: 'top', startProp: 'y', endProp: 'y2'}\n};\n\n/**\n * @typedef { import(\"chart.js\").Chart } Chart\n * @typedef { import(\"chart.js\").Scale } Scale\n * @typedef { import(\"chart.js\").Point } Point\n * @typedef { import('../../types/element').AnnotationBoxModel } AnnotationBoxModel\n * @typedef { import('../../types/options').CoreAnnotationOptions } CoreAnnotationOptions\n * @typedef { import('../../types/options').LineAnnotationOptions } LineAnnotationOptions\n * @typedef { import('../../types/options').PointAnnotationOptions } PointAnnotationOptions\n * @typedef { import('../../types/options').PolygonAnnotationOptions } PolygonAnnotationOptions\n */\n\n/**\n * @param {Scale} scale\n * @param {number|string} value\n * @param {number} fallback\n * @returns {number}\n */\nfunction scaleValue(scale, value, fallback) {\n value = typeof value === 'number' ? value : scale.parse(value);\n return isFinite(value) ? scale.getPixelForValue(value) : fallback;\n}\n\n/**\n * Search the scale defined in chartjs by the axis related to the annotation options key.\n * @param {{ [key: string]: Scale }} scales\n * @param {CoreAnnotationOptions} options\n * @param {string} key\n * @returns {string}\n */\nfunction retrieveScaleID(scales, options, key) {\n const scaleID = options[key];\n if (scaleID || key === 'scaleID') {\n return scaleID;\n }\n const axis = key.charAt(0);\n const axes = Object.values(scales).filter((scale) => scale.axis && scale.axis === axis);\n if (axes.length) {\n return axes[0].id;\n }\n return axis;\n}\n\n/**\n * @param {Scale} scale\n * @param {{min: number, max: number, start: number, end: number}} options\n * @returns {{start: number, end: number}|undefined}\n */\nfunction getDimensionByScale(scale, options) {\n if (scale) {\n const reverse = scale.options.reverse;\n const start = scaleValue(scale, options.min, reverse ? options.end : options.start);\n const end = scaleValue(scale, options.max, reverse ? options.start : options.end);\n return {\n start,\n end\n };\n }\n}\n\n/**\n * @param {Chart} chart\n * @param {CoreAnnotationOptions} options\n * @returns {Point}\n */\nfunction getChartPoint(chart, options) {\n const {chartArea, scales} = chart;\n const xScale = scales[retrieveScaleID(scales, options, 'xScaleID')];\n const yScale = scales[retrieveScaleID(scales, options, 'yScaleID')];\n let x = chartArea.width / 2;\n let y = chartArea.height / 2;\n\n if (xScale) {\n x = scaleValue(xScale, options.xValue, xScale.left + xScale.width / 2);\n }\n\n if (yScale) {\n y = scaleValue(yScale, options.yValue, yScale.top + yScale.height / 2);\n }\n return {x, y};\n}\n\n/**\n * @param {Chart} chart\n * @param {CoreAnnotationOptions} options\n * @returns {AnnotationBoxModel}\n */\nfunction resolveBoxProperties(chart, options) {\n const scales = chart.scales;\n const xScale = scales[retrieveScaleID(scales, options, 'xScaleID')];\n const yScale = scales[retrieveScaleID(scales, options, 'yScaleID')];\n\n if (!xScale && !yScale) {\n return {};\n }\n\n let {left: x, right: x2} = xScale || chart.chartArea;\n let {top: y, bottom: y2} = yScale || chart.chartArea;\n const xDim = getChartDimensionByScale(xScale, {min: options.xMin, max: options.xMax, start: x, end: x2});\n x = xDim.start;\n x2 = xDim.end;\n const yDim = getChartDimensionByScale(yScale, {min: options.yMin, max: options.yMax, start: y2, end: y});\n y = yDim.start;\n y2 = yDim.end;\n\n return {\n x,\n y,\n x2,\n y2,\n width: x2 - x,\n height: y2 - y,\n centerX: x + (x2 - x) / 2,\n centerY: y + (y2 - y) / 2\n };\n}\n\n/**\n * @param {Chart} chart\n * @param {PointAnnotationOptions|PolygonAnnotationOptions} options\n * @returns {AnnotationBoxModel}\n */\nfunction resolvePointProperties(chart, options) {\n if (!isBoundToPoint(options)) {\n const box = resolveBoxProperties(chart, options);\n let radius = options.radius;\n if (!radius || isNaN(radius)) {\n radius = Math.min(box.width, box.height) / 2;\n options.radius = radius;\n }\n const size = radius * 2;\n const adjustCenterX = box.centerX + options.xAdjust;\n const adjustCenterY = box.centerY + options.yAdjust;\n return {\n x: adjustCenterX - radius,\n y: adjustCenterY - radius,\n x2: adjustCenterX + radius,\n y2: adjustCenterY + radius,\n centerX: adjustCenterX,\n centerY: adjustCenterY,\n width: size,\n height: size,\n radius\n };\n }\n return getChartCircle(chart, options);\n}\n/**\n * @param {Chart} chart\n * @param {LineAnnotationOptions} options\n * @returns {AnnotationBoxModel}\n */\nfunction resolveLineProperties(chart, options) {\n const {scales, chartArea} = chart;\n const scale = scales[options.scaleID];\n const area = {x: chartArea.left, y: chartArea.top, x2: chartArea.right, y2: chartArea.bottom};\n\n if (scale) {\n resolveFullLineProperties(scale, area, options);\n } else {\n resolveLimitedLineProperties(scales, area, options);\n }\n return area;\n}\n\n/**\n * @param {Chart} chart\n * @param {CoreAnnotationOptions} options\n * @param {boolean} [centerBased=false]\n * @returns {AnnotationBoxModel}\n */\nfunction resolveBoxAndLabelProperties(chart, options, centerBased) {\n const properties = resolveBoxProperties(chart, options);\n properties.initProperties = initAnimationProperties(chart, properties, options, centerBased);\n properties.elements = [{\n type: 'label',\n optionScope: 'label',\n properties: resolveLabelElementProperties$1(chart, properties, options),\n initProperties: properties.initProperties\n }];\n return properties;\n}\n\nfunction getChartCircle(chart, options) {\n const point = getChartPoint(chart, options);\n const size = options.radius * 2;\n return {\n x: point.x - options.radius + options.xAdjust,\n y: point.y - options.radius + options.yAdjust,\n x2: point.x + options.radius + options.xAdjust,\n y2: point.y + options.radius + options.yAdjust,\n centerX: point.x + options.xAdjust,\n centerY: point.y + options.yAdjust,\n radius: options.radius,\n width: size,\n height: size\n };\n}\n\nfunction getChartDimensionByScale(scale, options) {\n const result = getDimensionByScale(scale, options) || options;\n return {\n start: Math.min(result.start, result.end),\n end: Math.max(result.start, result.end)\n };\n}\n\nfunction resolveFullLineProperties(scale, area, options) {\n const min = scaleValue(scale, options.value, NaN);\n const max = scaleValue(scale, options.endValue, min);\n if (scale.isHorizontal()) {\n area.x = min;\n area.x2 = max;\n } else {\n area.y = min;\n area.y2 = max;\n }\n}\n\nfunction resolveLimitedLineProperties(scales, area, options) {\n for (const scaleId of Object.keys(limitedLineScale)) {\n const scale = scales[retrieveScaleID(scales, options, scaleId)];\n if (scale) {\n const {min, max, start, end, startProp, endProp} = limitedLineScale[scaleId];\n const dim = getDimensionByScale(scale, {min: options[min], max: options[max], start: scale[start], end: scale[end]});\n area[startProp] = dim.start;\n area[endProp] = dim.end;\n }\n }\n}\n\nfunction calculateX({properties, options}, labelSize, position, padding) {\n const {x: start, x2: end, width: size} = properties;\n return calculatePosition$1({start, end, size, borderWidth: options.borderWidth}, {\n position: position.x,\n padding: {start: padding.left, end: padding.right},\n adjust: options.label.xAdjust,\n size: labelSize.width\n });\n}\n\nfunction calculateY({properties, options}, labelSize, position, padding) {\n const {y: start, y2: end, height: size} = properties;\n return calculatePosition$1({start, end, size, borderWidth: options.borderWidth}, {\n position: position.y,\n padding: {start: padding.top, end: padding.bottom},\n adjust: options.label.yAdjust,\n size: labelSize.height\n });\n}\n\nfunction calculatePosition$1(boxOpts, labelOpts) {\n const {start, end, borderWidth} = boxOpts;\n const {position, padding: {start: padStart, end: padEnd}, adjust} = labelOpts;\n const availableSize = end - borderWidth - start - padStart - padEnd - labelOpts.size;\n return start + borderWidth / 2 + adjust + getRelativePosition(availableSize, position);\n}\n\nfunction resolveLabelElementProperties$1(chart, properties, options) {\n const label = options.label;\n label.backgroundColor = 'transparent';\n label.callout.display = false;\n const position = toPosition(label.position);\n const padding = toPadding(label.padding);\n const labelSize = measureLabelSize(chart.ctx, label);\n const x = calculateX({properties, options}, labelSize, position, padding);\n const y = calculateY({properties, options}, labelSize, position, padding);\n const width = labelSize.width + padding.width;\n const height = labelSize.height + padding.height;\n return {\n x,\n y,\n x2: x + width,\n y2: y + height,\n width,\n height,\n centerX: x + width / 2,\n centerY: y + height / 2,\n rotation: label.rotation\n };\n\n}\n\n/**\n * @typedef {import('chart.js').Point} Point\n */\n\n/**\n * Rotate a `point` relative to `center` point by `angle`\n * @param {Point} point - the point to rotate\n * @param {Point} center - center point for rotation\n * @param {number} angle - angle for rotation, in radians\n * @returns {Point} rotated point\n */\nfunction rotated(point, center, angle) {\n const cos = Math.cos(angle);\n const sin = Math.sin(angle);\n const cx = center.x;\n const cy = center.y;\n\n return {\n x: cx + cos * (point.x - cx) - sin * (point.y - cy),\n y: cy + sin * (point.x - cx) + cos * (point.y - cy)\n };\n}\n\nconst moveHooks = ['enter', 'leave'];\n\n/**\n * @typedef { import(\"chart.js\").Chart } Chart\n * @typedef { import('../../types/options').AnnotationPluginOptions } AnnotationPluginOptions\n */\n\nconst eventHooks = moveHooks.concat('click');\n\n/**\n * @param {Chart} chart\n * @param {Object} state\n * @param {AnnotationPluginOptions} options\n */\nfunction updateListeners(chart, state, options) {\n state.listened = loadHooks(options, eventHooks, state.listeners);\n state.moveListened = false;\n state._getElements = getElements; // for testing\n\n moveHooks.forEach(hook => {\n if (isFunction(options[hook])) {\n state.moveListened = true;\n }\n });\n\n if (!state.listened || !state.moveListened) {\n state.annotations.forEach(scope => {\n if (!state.listened && isFunction(scope.click)) {\n state.listened = true;\n }\n if (!state.moveListened) {\n moveHooks.forEach(hook => {\n if (isFunction(scope[hook])) {\n state.listened = true;\n state.moveListened = true;\n }\n });\n }\n });\n }\n}\n\n/**\n * @param {Object} state\n * @param {ChartEvent} event\n * @param {AnnotationPluginOptions} options\n * @return {boolean|undefined}\n */\nfunction handleEvent(state, event, options) {\n if (state.listened) {\n switch (event.type) {\n case 'mousemove':\n case 'mouseout':\n return handleMoveEvents(state, event, options);\n case 'click':\n return handleClickEvents(state, event, options);\n }\n }\n}\n\nfunction handleMoveEvents(state, event, options) {\n if (!state.moveListened) {\n return;\n }\n\n let elements;\n\n if (event.type === 'mousemove') {\n elements = getElements(state, event, options.interaction);\n } else {\n elements = [];\n }\n\n const previous = state.hovered;\n state.hovered = elements;\n\n const context = {state, event};\n let changed = dispatchMoveEvents(context, 'leave', previous, elements);\n return dispatchMoveEvents(context, 'enter', elements, previous) || changed;\n}\n\nfunction dispatchMoveEvents({state, event}, hook, elements, checkElements) {\n let changed;\n for (const element of elements) {\n if (checkElements.indexOf(element) < 0) {\n changed = dispatchEvent(element.options[hook] || state.listeners[hook], element, event) || changed;\n }\n }\n return changed;\n}\n\nfunction handleClickEvents(state, event, options) {\n const listeners = state.listeners;\n const elements = getElements(state, event, options.interaction);\n let changed;\n for (const element of elements) {\n changed = dispatchEvent(element.options.click || listeners.click, element, event) || changed;\n }\n return changed;\n}\n\nfunction dispatchEvent(handler, element, event) {\n return callback(handler, [element.$context, event]) === true;\n}\n\n/**\n * @typedef { import(\"chart.js\").Chart } Chart\n * @typedef { import('../../types/options').AnnotationPluginOptions } AnnotationPluginOptions\n * @typedef { import('../../types/element').AnnotationElement } AnnotationElement\n */\n\nconst elementHooks = ['afterDraw', 'beforeDraw'];\n\n/**\n * @param {Chart} chart\n * @param {Object} state\n * @param {AnnotationPluginOptions} options\n */\nfunction updateHooks(chart, state, options) {\n const visibleElements = state.visibleElements;\n state.hooked = loadHooks(options, elementHooks, state.hooks);\n\n if (!state.hooked) {\n visibleElements.forEach(scope => {\n if (!state.hooked) {\n elementHooks.forEach(hook => {\n if (isFunction(scope.options[hook])) {\n state.hooked = true;\n }\n });\n }\n });\n }\n}\n\n/**\n * @param {Object} state\n * @param {AnnotationElement} element\n * @param {string} hook\n */\nfunction invokeHook(state, element, hook) {\n if (state.hooked) {\n const callbackHook = element.options[hook] || state.hooks[hook];\n return callback(callbackHook, [element.$context]);\n }\n}\n\n/**\n * @typedef { import(\"chart.js\").Chart } Chart\n * @typedef { import(\"chart.js\").Scale } Scale\n * @typedef { import('../../types/options').CoreAnnotationOptions } CoreAnnotationOptions\n */\n\n/**\n * @param {Chart} chart\n * @param {Scale} scale\n * @param {CoreAnnotationOptions[]} annotations\n */\nfunction adjustScaleRange(chart, scale, annotations) {\n const range = getScaleLimits(chart.scales, scale, annotations);\n let changed = changeScaleLimit(scale, range, 'min', 'suggestedMin');\n changed = changeScaleLimit(scale, range, 'max', 'suggestedMax') || changed;\n if (changed && isFunction(scale.handleTickRangeOptions)) {\n scale.handleTickRangeOptions();\n }\n}\n\n/**\n * @param {CoreAnnotationOptions[]} annotations\n * @param {{ [key: string]: Scale }} scales\n */\nfunction verifyScaleOptions(annotations, scales) {\n for (const annotation of annotations) {\n verifyScaleIDs(annotation, scales);\n }\n}\n\nfunction changeScaleLimit(scale, range, limit, suggestedLimit) {\n if (isFinite(range[limit]) && !scaleLimitDefined(scale.options, limit, suggestedLimit)) {\n const changed = scale[limit] !== range[limit];\n scale[limit] = range[limit];\n return changed;\n }\n}\n\nfunction scaleLimitDefined(scaleOptions, limit, suggestedLimit) {\n return defined(scaleOptions[limit]) || defined(scaleOptions[suggestedLimit]);\n}\n\nfunction verifyScaleIDs(annotation, scales) {\n for (const key of ['scaleID', 'xScaleID', 'yScaleID']) {\n const scaleID = retrieveScaleID(scales, annotation, key);\n if (scaleID && !scales[scaleID] && verifyProperties(annotation, key)) {\n console.warn(`No scale found with id '${scaleID}' for annotation '${annotation.id}'`);\n }\n }\n}\n\nfunction verifyProperties(annotation, key) {\n if (key === 'scaleID') {\n return true;\n }\n const axis = key.charAt(0);\n for (const prop of ['Min', 'Max', 'Value']) {\n if (defined(annotation[axis + prop])) {\n return true;\n }\n }\n return false;\n}\n\nfunction getScaleLimits(scales, scale, annotations) {\n const axis = scale.axis;\n const scaleID = scale.id;\n const scaleIDOption = axis + 'ScaleID';\n const limits = {\n min: valueOrDefault(scale.min, Number.NEGATIVE_INFINITY),\n max: valueOrDefault(scale.max, Number.POSITIVE_INFINITY)\n };\n for (const annotation of annotations) {\n if (annotation.scaleID === scaleID) {\n updateLimits(annotation, scale, ['value', 'endValue'], limits);\n } else if (retrieveScaleID(scales, annotation, scaleIDOption) === scaleID) {\n updateLimits(annotation, scale, [axis + 'Min', axis + 'Max', axis + 'Value'], limits);\n }\n }\n return limits;\n}\n\nfunction updateLimits(annotation, scale, props, limits) {\n for (const prop of props) {\n const raw = annotation[prop];\n if (defined(raw)) {\n const value = scale.parse(raw);\n limits.min = Math.min(limits.min, value);\n limits.max = Math.max(limits.max, value);\n }\n }\n}\n\nclass BoxAnnotation extends Element {\n\n inRange(mouseX, mouseY, axis, useFinalPosition) {\n const {x, y} = rotated({x: mouseX, y: mouseY}, this.getCenterPoint(useFinalPosition), toRadians(-this.options.rotation));\n return inBoxRange({x, y}, this.getProps(['x', 'y', 'x2', 'y2'], useFinalPosition), axis, this.options.borderWidth);\n }\n\n getCenterPoint(useFinalPosition) {\n return getElementCenterPoint(this, useFinalPosition);\n }\n\n draw(ctx) {\n ctx.save();\n translate(ctx, this.getCenterPoint(), this.options.rotation);\n drawBox(ctx, this, this.options);\n ctx.restore();\n }\n\n get label() {\n return this.elements && this.elements[0];\n }\n\n resolveElementProperties(chart, options) {\n return resolveBoxAndLabelProperties(chart, options);\n }\n}\n\nBoxAnnotation.id = 'boxAnnotation';\n\nBoxAnnotation.defaults = {\n adjustScaleRange: true,\n backgroundShadowColor: 'transparent',\n borderCapStyle: 'butt',\n borderDash: [],\n borderDashOffset: 0,\n borderJoinStyle: 'miter',\n borderRadius: 0,\n borderShadowColor: 'transparent',\n borderWidth: 1,\n display: true,\n init: undefined,\n label: {\n backgroundColor: 'transparent',\n borderWidth: 0,\n callout: {\n display: false\n },\n color: 'black',\n content: null,\n display: false,\n drawTime: undefined,\n font: {\n family: undefined,\n lineHeight: undefined,\n size: undefined,\n style: undefined,\n weight: 'bold'\n },\n height: undefined,\n opacity: undefined,\n padding: 6,\n position: 'center',\n rotation: undefined,\n textAlign: 'start',\n textStrokeColor: undefined,\n textStrokeWidth: 0,\n width: undefined,\n xAdjust: 0,\n yAdjust: 0,\n z: undefined\n },\n rotation: 0,\n shadowBlur: 0,\n shadowOffsetX: 0,\n shadowOffsetY: 0,\n xMax: undefined,\n xMin: undefined,\n xScaleID: undefined,\n yMax: undefined,\n yMin: undefined,\n yScaleID: undefined,\n z: 0\n};\n\nBoxAnnotation.defaultRoutes = {\n borderColor: 'color',\n backgroundColor: 'color'\n};\n\nBoxAnnotation.descriptors = {\n label: {\n _fallback: true\n }\n};\n\nconst positions = ['left', 'bottom', 'top', 'right'];\n\nclass LabelAnnotation extends Element {\n\n inRange(mouseX, mouseY, axis, useFinalPosition) {\n const {x, y} = rotated({x: mouseX, y: mouseY}, this.getCenterPoint(useFinalPosition), toRadians(-this.rotation));\n return inBoxRange({x, y}, this.getProps(['x', 'y', 'x2', 'y2'], useFinalPosition), axis, this.options.borderWidth);\n }\n\n getCenterPoint(useFinalPosition) {\n return getElementCenterPoint(this, useFinalPosition);\n }\n\n draw(ctx) {\n const options = this.options;\n const visible = !defined(this._visible) || this._visible;\n if (!options.display || !options.content || !visible) {\n return;\n }\n ctx.save();\n translate(ctx, this.getCenterPoint(), this.rotation);\n drawCallout(ctx, this);\n drawBox(ctx, this, options);\n drawLabel(ctx, getLabelSize(this), options);\n ctx.restore();\n }\n\n resolveElementProperties(chart, options) {\n let point;\n if (!isBoundToPoint(options)) {\n const {centerX, centerY} = resolveBoxProperties(chart, options);\n point = {x: centerX, y: centerY};\n } else {\n point = getChartPoint(chart, options);\n }\n const padding = toPadding(options.padding);\n const labelSize = measureLabelSize(chart.ctx, options);\n const boxSize = measureRect(point, labelSize, options, padding);\n return {\n initProperties: initAnimationProperties(chart, boxSize, options),\n pointX: point.x,\n pointY: point.y,\n ...boxSize,\n rotation: options.rotation\n };\n }\n}\n\nLabelAnnotation.id = 'labelAnnotation';\n\nLabelAnnotation.defaults = {\n adjustScaleRange: true,\n backgroundColor: 'transparent',\n backgroundShadowColor: 'transparent',\n borderCapStyle: 'butt',\n borderDash: [],\n borderDashOffset: 0,\n borderJoinStyle: 'miter',\n borderRadius: 0,\n borderShadowColor: 'transparent',\n borderWidth: 0,\n callout: {\n borderCapStyle: 'butt',\n borderColor: undefined,\n borderDash: [],\n borderDashOffset: 0,\n borderJoinStyle: 'miter',\n borderWidth: 1,\n display: false,\n margin: 5,\n position: 'auto',\n side: 5,\n start: '50%',\n },\n color: 'black',\n content: null,\n display: true,\n font: {\n family: undefined,\n lineHeight: undefined,\n size: undefined,\n style: undefined,\n weight: undefined\n },\n height: undefined,\n init: undefined,\n opacity: undefined,\n padding: 6,\n position: 'center',\n rotation: 0,\n shadowBlur: 0,\n shadowOffsetX: 0,\n shadowOffsetY: 0,\n textAlign: 'center',\n textStrokeColor: undefined,\n textStrokeWidth: 0,\n width: undefined,\n xAdjust: 0,\n xMax: undefined,\n xMin: undefined,\n xScaleID: undefined,\n xValue: undefined,\n yAdjust: 0,\n yMax: undefined,\n yMin: undefined,\n yScaleID: undefined,\n yValue: undefined,\n z: 0\n};\n\nLabelAnnotation.defaultRoutes = {\n borderColor: 'color'\n};\n\nfunction measureRect(point, size, options, padding) {\n const width = size.width + padding.width + options.borderWidth;\n const height = size.height + padding.height + options.borderWidth;\n const position = toPosition(options.position, 'center');\n const x = calculatePosition(point.x, width, options.xAdjust, position.x);\n const y = calculatePosition(point.y, height, options.yAdjust, position.y);\n\n return {\n x,\n y,\n x2: x + width,\n y2: y + height,\n width,\n height,\n centerX: x + width / 2,\n centerY: y + height / 2\n };\n}\n\nfunction calculatePosition(start, size, adjust = 0, position) {\n return start - getRelativePosition(size, position) + adjust;\n}\n\nfunction drawCallout(ctx, element) {\n const {pointX, pointY, options} = element;\n const callout = options.callout;\n const calloutPosition = callout && callout.display && resolveCalloutPosition(element, callout);\n if (!calloutPosition || isPointInRange(element, callout, calloutPosition)) {\n return;\n }\n\n ctx.save();\n ctx.beginPath();\n const stroke = setBorderStyle(ctx, callout);\n if (!stroke) {\n return ctx.restore();\n }\n const {separatorStart, separatorEnd} = getCalloutSeparatorCoord(element, calloutPosition);\n const {sideStart, sideEnd} = getCalloutSideCoord(element, calloutPosition, separatorStart);\n if (callout.margin > 0 || options.borderWidth === 0) {\n ctx.moveTo(separatorStart.x, separatorStart.y);\n ctx.lineTo(separatorEnd.x, separatorEnd.y);\n }\n ctx.moveTo(sideStart.x, sideStart.y);\n ctx.lineTo(sideEnd.x, sideEnd.y);\n const rotatedPoint = rotated({x: pointX, y: pointY}, element.getCenterPoint(), toRadians(-element.rotation));\n ctx.lineTo(rotatedPoint.x, rotatedPoint.y);\n ctx.stroke();\n ctx.restore();\n}\n\nfunction getCalloutSeparatorCoord(element, position) {\n const {x, y, x2, y2} = element;\n const adjust = getCalloutSeparatorAdjust(element, position);\n let separatorStart, separatorEnd;\n if (position === 'left' || position === 'right') {\n separatorStart = {x: x + adjust, y};\n separatorEnd = {x: separatorStart.x, y: y2};\n } else {\n // position 'top' or 'bottom'\n separatorStart = {x, y: y + adjust};\n separatorEnd = {x: x2, y: separatorStart.y};\n }\n return {separatorStart, separatorEnd};\n}\n\nfunction getCalloutSeparatorAdjust(element, position) {\n const {width, height, options} = element;\n const adjust = options.callout.margin + options.borderWidth / 2;\n if (position === 'right') {\n return width + adjust;\n } else if (position === 'bottom') {\n return height + adjust;\n }\n return -adjust;\n}\n\nfunction getCalloutSideCoord(element, position, separatorStart) {\n const {y, width, height, options} = element;\n const start = options.callout.start;\n const side = getCalloutSideAdjust(position, options.callout);\n let sideStart, sideEnd;\n if (position === 'left' || position === 'right') {\n sideStart = {x: separatorStart.x, y: y + getSize(height, start)};\n sideEnd = {x: sideStart.x + side, y: sideStart.y};\n } else {\n // position 'top' or 'bottom'\n sideStart = {x: separatorStart.x + getSize(width, start), y: separatorStart.y};\n sideEnd = {x: sideStart.x, y: sideStart.y + side};\n }\n return {sideStart, sideEnd};\n}\n\nfunction getCalloutSideAdjust(position, options) {\n const side = options.side;\n if (position === 'left' || position === 'top') {\n return -side;\n }\n return side;\n}\n\nfunction resolveCalloutPosition(element, options) {\n const position = options.position;\n if (positions.includes(position)) {\n return position;\n }\n return resolveCalloutAutoPosition(element, options);\n}\n\nfunction resolveCalloutAutoPosition(element, options) {\n const {x, y, x2, y2, width, height, pointX, pointY, centerX, centerY, rotation} = element;\n const center = {x: centerX, y: centerY};\n const start = options.start;\n const xAdjust = getSize(width, start);\n const yAdjust = getSize(height, start);\n const xPoints = [x, x + xAdjust, x + xAdjust, x2];\n const yPoints = [y + yAdjust, y2, y, y2];\n const result = [];\n for (let index = 0; index < 4; index++) {\n const rotatedPoint = rotated({x: xPoints[index], y: yPoints[index]}, center, toRadians(rotation));\n result.push({\n position: positions[index],\n distance: distanceBetweenPoints(rotatedPoint, {x: pointX, y: pointY})\n });\n }\n return result.sort((a, b) => a.distance - b.distance)[0].position;\n}\n\nfunction getLabelSize({x, y, width, height, options}) {\n const hBorderWidth = options.borderWidth / 2;\n const padding = toPadding(options.padding);\n return {\n x: x + padding.left + hBorderWidth,\n y: y + padding.top + hBorderWidth,\n width: width - padding.left - padding.right - options.borderWidth,\n height: height - padding.top - padding.bottom - options.borderWidth\n };\n}\n\nfunction isPointInRange(element, callout, position) {\n const {pointX, pointY} = element;\n const margin = callout.margin;\n let x = pointX;\n let y = pointY;\n if (position === 'left') {\n x += margin;\n } else if (position === 'right') {\n x -= margin;\n } else if (position === 'top') {\n y += margin;\n } else if (position === 'bottom') {\n y -= margin;\n }\n return element.inRange(x, y);\n}\n\nconst pointInLine = (p1, p2, t) => ({x: p1.x + t * (p2.x - p1.x), y: p1.y + t * (p2.y - p1.y)});\nconst interpolateX = (y, p1, p2) => pointInLine(p1, p2, Math.abs((y - p1.y) / (p2.y - p1.y))).x;\nconst interpolateY = (x, p1, p2) => pointInLine(p1, p2, Math.abs((x - p1.x) / (p2.x - p1.x))).y;\nconst sqr = v => v * v;\nconst rangeLimit = (mouseX, mouseY, {x, y, x2, y2}, axis) => axis === 'y' ? {start: Math.min(y, y2), end: Math.max(y, y2), value: mouseY} : {start: Math.min(x, x2), end: Math.max(x, x2), value: mouseX};\n// http://www.independent-software.com/determining-coordinates-on-a-html-canvas-bezier-curve.html\nconst coordInCurve = (start, cp, end, t) => (1 - t) * (1 - t) * start + 2 * (1 - t) * t * cp + t * t * end;\nconst pointInCurve = (start, cp, end, t) => ({x: coordInCurve(start.x, cp.x, end.x, t), y: coordInCurve(start.y, cp.y, end.y, t)});\nconst coordAngleInCurve = (start, cp, end, t) => 2 * (1 - t) * (cp - start) + 2 * t * (end - cp);\nconst angleInCurve = (start, cp, end, t) => -Math.atan2(coordAngleInCurve(start.x, cp.x, end.x, t), coordAngleInCurve(start.y, cp.y, end.y, t)) + 0.5 * PI;\n\nclass LineAnnotation extends Element {\n\n inRange(mouseX, mouseY, axis, useFinalPosition) {\n const hBorderWidth = this.options.borderWidth / 2;\n if (axis !== 'x' && axis !== 'y') {\n const point = {mouseX, mouseY};\n const {path, ctx} = this;\n if (path) {\n setBorderStyle(ctx, this.options);\n const {chart} = this.$context;\n const mx = mouseX * chart.currentDevicePixelRatio;\n const my = mouseY * chart.currentDevicePixelRatio;\n const result = ctx.isPointInStroke(path, mx, my) || isOnLabel(this, point, useFinalPosition);\n ctx.restore();\n return result;\n }\n const epsilon = sqr(hBorderWidth);\n return intersects(this, point, epsilon, useFinalPosition) || isOnLabel(this, point, useFinalPosition);\n }\n return inAxisRange(this, {mouseX, mouseY}, axis, {hBorderWidth, useFinalPosition});\n }\n\n getCenterPoint(useFinalPosition) {\n return getElementCenterPoint(this, useFinalPosition);\n }\n\n draw(ctx) {\n const {x, y, x2, y2, cp, options} = this;\n\n ctx.save();\n if (!setBorderStyle(ctx, options)) {\n // no border width, then line is not drawn\n return ctx.restore();\n }\n setShadowStyle(ctx, options);\n\n const length = Math.sqrt(Math.pow(x2 - x, 2) + Math.pow(y2 - y, 2));\n if (options.curve && cp) {\n drawCurve(ctx, this, cp, length);\n return ctx.restore();\n }\n const {startOpts, endOpts, startAdjust, endAdjust} = getArrowHeads(this);\n const angle = Math.atan2(y2 - y, x2 - x);\n ctx.translate(x, y);\n ctx.rotate(angle);\n ctx.beginPath();\n ctx.moveTo(0 + startAdjust, 0);\n ctx.lineTo(length - endAdjust, 0);\n ctx.shadowColor = options.borderShadowColor;\n ctx.stroke();\n drawArrowHead(ctx, 0, startAdjust, startOpts);\n drawArrowHead(ctx, length, -endAdjust, endOpts);\n ctx.restore();\n }\n\n get label() {\n return this.elements && this.elements[0];\n }\n\n resolveElementProperties(chart, options) {\n const area = resolveLineProperties(chart, options);\n const {x, y, x2, y2} = area;\n const inside = isLineInArea(area, chart.chartArea);\n const properties = inside\n ? limitLineToArea({x, y}, {x: x2, y: y2}, chart.chartArea)\n : {x, y, x2, y2, width: Math.abs(x2 - x), height: Math.abs(y2 - y)};\n properties.centerX = (x2 + x) / 2;\n properties.centerY = (y2 + y) / 2;\n properties.initProperties = initAnimationProperties(chart, properties, options);\n if (options.curve) {\n const p1 = {x: properties.x, y: properties.y};\n const p2 = {x: properties.x2, y: properties.y2};\n properties.cp = getControlPoint(properties, options, distanceBetweenPoints(p1, p2));\n }\n const labelProperties = resolveLabelElementProperties(chart, properties, options.label);\n // additonal prop to manage zoom/pan\n labelProperties._visible = inside;\n\n properties.elements = [{\n type: 'label',\n optionScope: 'label',\n properties: labelProperties,\n initProperties: properties.initProperties\n }];\n return properties;\n }\n}\n\nLineAnnotation.id = 'lineAnnotation';\n\nconst arrowHeadsDefaults = {\n backgroundColor: undefined,\n backgroundShadowColor: undefined,\n borderColor: undefined,\n borderDash: undefined,\n borderDashOffset: undefined,\n borderShadowColor: undefined,\n borderWidth: undefined,\n display: undefined,\n fill: undefined,\n length: undefined,\n shadowBlur: undefined,\n shadowOffsetX: undefined,\n shadowOffsetY: undefined,\n width: undefined\n};\n\nLineAnnotation.defaults = {\n adjustScaleRange: true,\n arrowHeads: {\n display: false,\n end: Object.assign({}, arrowHeadsDefaults),\n fill: false,\n length: 12,\n start: Object.assign({}, arrowHeadsDefaults),\n width: 6\n },\n borderDash: [],\n borderDashOffset: 0,\n borderShadowColor: 'transparent',\n borderWidth: 2,\n curve: false,\n controlPoint: {\n y: '-50%'\n },\n display: true,\n endValue: undefined,\n init: undefined,\n label: {\n backgroundColor: 'rgba(0,0,0,0.8)',\n backgroundShadowColor: 'transparent',\n borderCapStyle: 'butt',\n borderColor: 'black',\n borderDash: [],\n borderDashOffset: 0,\n borderJoinStyle: 'miter',\n borderRadius: 6,\n borderShadowColor: 'transparent',\n borderWidth: 0,\n callout: Object.assign({}, LabelAnnotation.defaults.callout),\n color: '#fff',\n content: null,\n display: false,\n drawTime: undefined,\n font: {\n family: undefined,\n lineHeight: undefined,\n size: undefined,\n style: undefined,\n weight: 'bold'\n },\n height: undefined,\n opacity: undefined,\n padding: 6,\n position: 'center',\n rotation: 0,\n shadowBlur: 0,\n shadowOffsetX: 0,\n shadowOffsetY: 0,\n textAlign: 'center',\n textStrokeColor: undefined,\n textStrokeWidth: 0,\n width: undefined,\n xAdjust: 0,\n yAdjust: 0,\n z: undefined\n },\n scaleID: undefined,\n shadowBlur: 0,\n shadowOffsetX: 0,\n shadowOffsetY: 0,\n value: undefined,\n xMax: undefined,\n xMin: undefined,\n xScaleID: undefined,\n yMax: undefined,\n yMin: undefined,\n yScaleID: undefined,\n z: 0\n};\n\nLineAnnotation.descriptors = {\n arrowHeads: {\n start: {\n _fallback: true\n },\n end: {\n _fallback: true\n },\n _fallback: true\n }\n};\n\nLineAnnotation.defaultRoutes = {\n borderColor: 'color'\n};\n\nfunction inAxisRange(element, {mouseX, mouseY}, axis, {hBorderWidth, useFinalPosition}) {\n const limit = rangeLimit(mouseX, mouseY, element.getProps(['x', 'y', 'x2', 'y2'], useFinalPosition), axis);\n return (limit.value >= limit.start - hBorderWidth && limit.value <= limit.end + hBorderWidth) || isOnLabel(element, {mouseX, mouseY}, useFinalPosition, axis);\n}\n\nfunction isLineInArea({x, y, x2, y2}, {top, right, bottom, left}) {\n return !(\n (x < left && x2 < left) ||\n (x > right && x2 > right) ||\n (y < top && y2 < top) ||\n (y > bottom && y2 > bottom)\n );\n}\n\nfunction limitPointToArea({x, y}, p2, {top, right, bottom, left}) {\n if (x < left) {\n y = interpolateY(left, {x, y}, p2);\n x = left;\n }\n if (x > right) {\n y = interpolateY(right, {x, y}, p2);\n x = right;\n }\n if (y < top) {\n x = interpolateX(top, {x, y}, p2);\n y = top;\n }\n if (y > bottom) {\n x = interpolateX(bottom, {x, y}, p2);\n y = bottom;\n }\n return {x, y};\n}\n\nfunction limitLineToArea(p1, p2, area) {\n const {x, y} = limitPointToArea(p1, p2, area);\n const {x: x2, y: y2} = limitPointToArea(p2, p1, area);\n return {x, y, x2, y2, width: Math.abs(x2 - x), height: Math.abs(y2 - y)};\n}\n\nfunction intersects(element, {mouseX, mouseY}, epsilon = EPSILON, useFinalPosition) {\n // Adapted from https://stackoverflow.com/a/6853926/25507\n const {x: x1, y: y1, x2, y2} = element.getProps(['x', 'y', 'x2', 'y2'], useFinalPosition);\n const dx = x2 - x1;\n const dy = y2 - y1;\n const lenSq = sqr(dx) + sqr(dy);\n const t = lenSq === 0 ? -1 : ((mouseX - x1) * dx + (mouseY - y1) * dy) / lenSq;\n let xx, yy;\n if (t < 0) {\n xx = x1;\n yy = y1;\n } else if (t > 1) {\n xx = x2;\n yy = y2;\n } else {\n xx = x1 + t * dx;\n yy = y1 + t * dy;\n }\n return (sqr(mouseX - xx) + sqr(mouseY - yy)) <= epsilon;\n}\n\nfunction isOnLabel(element, {mouseX, mouseY}, useFinalPosition, axis) {\n const label = element.label;\n return label.options.display && label.inRange(mouseX, mouseY, axis, useFinalPosition);\n}\n\nfunction resolveLabelElementProperties(chart, properties, options) {\n const borderWidth = options.borderWidth;\n const padding = toPadding(options.padding);\n const textSize = measureLabelSize(chart.ctx, options);\n const width = textSize.width + padding.width + borderWidth;\n const height = textSize.height + padding.height + borderWidth;\n return calculateLabelPosition(properties, options, {width, height, padding}, chart.chartArea);\n}\n\nfunction calculateAutoRotation(properties) {\n const {x, y, x2, y2} = properties;\n const rotation = Math.atan2(y2 - y, x2 - x);\n // Flip the rotation if it goes > PI/2 or < -PI/2, so label stays upright\n return rotation > PI / 2 ? rotation - PI : rotation < PI / -2 ? rotation + PI : rotation;\n}\n\nfunction calculateLabelPosition(properties, label, sizes, chartArea) {\n const {width, height, padding} = sizes;\n const {xAdjust, yAdjust} = label;\n const p1 = {x: properties.x, y: properties.y};\n const p2 = {x: properties.x2, y: properties.y2};\n const rotation = label.rotation === 'auto' ? calculateAutoRotation(properties) : toRadians(label.rotation);\n const size = rotatedSize(width, height, rotation);\n const t = calculateT(properties, label, {labelSize: size, padding}, chartArea);\n const pt = properties.cp ? pointInCurve(p1, properties.cp, p2, t) : pointInLine(p1, p2, t);\n const xCoordinateSizes = {size: size.w, min: chartArea.left, max: chartArea.right, padding: padding.left};\n const yCoordinateSizes = {size: size.h, min: chartArea.top, max: chartArea.bottom, padding: padding.top};\n const centerX = adjustLabelCoordinate(pt.x, xCoordinateSizes) + xAdjust;\n const centerY = adjustLabelCoordinate(pt.y, yCoordinateSizes) + yAdjust;\n return {\n x: centerX - (width / 2),\n y: centerY - (height / 2),\n x2: centerX + (width / 2),\n y2: centerY + (height / 2),\n centerX,\n centerY,\n pointX: pt.x,\n pointY: pt.y,\n width,\n height,\n rotation: toDegrees(rotation)\n };\n}\n\nfunction rotatedSize(width, height, rotation) {\n const cos = Math.cos(rotation);\n const sin = Math.sin(rotation);\n return {\n w: Math.abs(width * cos) + Math.abs(height * sin),\n h: Math.abs(width * sin) + Math.abs(height * cos)\n };\n}\n\nfunction calculateT(properties, label, sizes, chartArea) {\n let t;\n const space = spaceAround(properties, chartArea);\n if (label.position === 'start') {\n t = calculateTAdjust({w: properties.x2 - properties.x, h: properties.y2 - properties.y}, sizes, label, space);\n } else if (label.position === 'end') {\n t = 1 - calculateTAdjust({w: properties.x - properties.x2, h: properties.y - properties.y2}, sizes, label, space);\n } else {\n t = getRelativePosition(1, label.position);\n }\n return t;\n}\n\nfunction calculateTAdjust(lineSize, sizes, label, space) {\n const {labelSize, padding} = sizes;\n const lineW = lineSize.w * space.dx;\n const lineH = lineSize.h * space.dy;\n const x = (lineW > 0) && ((labelSize.w / 2 + padding.left - space.x) / lineW);\n const y = (lineH > 0) && ((labelSize.h / 2 + padding.top - space.y) / lineH);\n return clamp(Math.max(x, y), 0, 0.25);\n}\n\nfunction spaceAround(properties, chartArea) {\n const {x, x2, y, y2} = properties;\n const t = Math.min(y, y2) - chartArea.top;\n const l = Math.min(x, x2) - chartArea.left;\n const b = chartArea.bottom - Math.max(y, y2);\n const r = chartArea.right - Math.max(x, x2);\n return {\n x: Math.min(l, r),\n y: Math.min(t, b),\n dx: l <= r ? 1 : -1,\n dy: t <= b ? 1 : -1\n };\n}\n\nfunction adjustLabelCoordinate(coordinate, labelSizes) {\n const {size, min, max, padding} = labelSizes;\n const halfSize = size / 2;\n if (size > max - min) {\n // if it does not fit, display as much as possible\n return (max + min) / 2;\n }\n if (min >= (coordinate - padding - halfSize)) {\n coordinate = min + padding + halfSize;\n }\n if (max <= (coordinate + padding + halfSize)) {\n coordinate = max - padding - halfSize;\n }\n return coordinate;\n}\n\nfunction getArrowHeads(line) {\n const options = line.options;\n const arrowStartOpts = options.arrowHeads && options.arrowHeads.start;\n const arrowEndOpts = options.arrowHeads && options.arrowHeads.end;\n return {\n startOpts: arrowStartOpts,\n endOpts: arrowEndOpts,\n startAdjust: getLineAdjust(line, arrowStartOpts),\n endAdjust: getLineAdjust(line, arrowEndOpts)\n };\n}\n\nfunction getLineAdjust(line, arrowOpts) {\n if (!arrowOpts || !arrowOpts.display) {\n return 0;\n }\n const {length, width} = arrowOpts;\n const adjust = line.options.borderWidth / 2;\n const p1 = {x: length, y: width + adjust};\n const p2 = {x: 0, y: adjust};\n return Math.abs(interpolateX(0, p1, p2));\n}\n\nfunction drawArrowHead(ctx, offset, adjust, arrowOpts) {\n if (!arrowOpts || !arrowOpts.display) {\n return;\n }\n const {length, width, fill, backgroundColor, borderColor} = arrowOpts;\n const arrowOffsetX = Math.abs(offset - length) + adjust;\n ctx.beginPath();\n setShadowStyle(ctx, arrowOpts);\n setBorderStyle(ctx, arrowOpts);\n ctx.moveTo(arrowOffsetX, -width);\n ctx.lineTo(offset + adjust, 0);\n ctx.lineTo(arrowOffsetX, width);\n if (fill === true) {\n ctx.fillStyle = backgroundColor || borderColor;\n ctx.closePath();\n ctx.fill();\n ctx.shadowColor = 'transparent';\n } else {\n ctx.shadowColor = arrowOpts.borderShadowColor;\n }\n ctx.stroke();\n}\n\nfunction getControlPoint(properties, options, distance) {\n const {x, y, x2, y2, centerX, centerY} = properties;\n const angle = Math.atan2(y2 - y, x2 - x);\n const cp = toPosition(options.controlPoint, 0);\n const point = {\n x: centerX + getSize(distance, cp.x, false),\n y: centerY + getSize(distance, cp.y, false)\n };\n return rotated(point, {x: centerX, y: centerY}, angle);\n}\n\nfunction drawArrowHeadOnCurve(ctx, {x, y}, {angle, adjust}, arrowOpts) {\n if (!arrowOpts || !arrowOpts.display) {\n return;\n }\n ctx.save();\n ctx.translate(x, y);\n ctx.rotate(angle);\n drawArrowHead(ctx, 0, -adjust, arrowOpts);\n ctx.restore();\n}\n\nfunction drawCurve(ctx, element, cp, length) {\n const {x, y, x2, y2, options} = element;\n const {startOpts, endOpts, startAdjust, endAdjust} = getArrowHeads(element);\n const p1 = {x, y};\n const p2 = {x: x2, y: y2};\n const startAngle = angleInCurve(p1, cp, p2, 0);\n const endAngle = angleInCurve(p1, cp, p2, 1) - PI;\n const ps = pointInCurve(p1, cp, p2, startAdjust / length);\n const pe = pointInCurve(p1, cp, p2, 1 - endAdjust / length);\n\n const path = new Path2D();\n ctx.beginPath();\n path.moveTo(ps.x, ps.y);\n path.quadraticCurveTo(cp.x, cp.y, pe.x, pe.y);\n ctx.shadowColor = options.borderShadowColor;\n ctx.stroke(path);\n element.path = path;\n element.ctx = ctx;\n drawArrowHeadOnCurve(ctx, ps, {angle: startAngle, adjust: startAdjust}, startOpts);\n drawArrowHeadOnCurve(ctx, pe, {angle: endAngle, adjust: endAdjust}, endOpts);\n}\n\nclass EllipseAnnotation extends Element {\n\n inRange(mouseX, mouseY, axis, useFinalPosition) {\n const rotation = this.options.rotation;\n const borderWidth = this.options.borderWidth;\n if (axis !== 'x' && axis !== 'y') {\n return pointInEllipse({x: mouseX, y: mouseY}, this.getProps(['width', 'height', 'centerX', 'centerY'], useFinalPosition), rotation, borderWidth);\n }\n const {x, y, x2, y2} = this.getProps(['x', 'y', 'x2', 'y2'], useFinalPosition);\n const hBorderWidth = borderWidth / 2;\n const limit = axis === 'y' ? {start: y, end: y2} : {start: x, end: x2};\n const rotatedPoint = rotated({x: mouseX, y: mouseY}, this.getCenterPoint(useFinalPosition), toRadians(-rotation));\n return rotatedPoint[axis] >= limit.start - hBorderWidth - EPSILON && rotatedPoint[axis] <= limit.end + hBorderWidth + EPSILON;\n }\n\n getCenterPoint(useFinalPosition) {\n return getElementCenterPoint(this, useFinalPosition);\n }\n\n draw(ctx) {\n const {width, height, centerX, centerY, options} = this;\n ctx.save();\n translate(ctx, this.getCenterPoint(), options.rotation);\n setShadowStyle(ctx, this.options);\n ctx.beginPath();\n ctx.fillStyle = options.backgroundColor;\n const stroke = setBorderStyle(ctx, options);\n ctx.ellipse(centerX, centerY, height / 2, width / 2, PI / 2, 0, 2 * PI);\n ctx.fill();\n if (stroke) {\n ctx.shadowColor = options.borderShadowColor;\n ctx.stroke();\n }\n ctx.restore();\n }\n\n get label() {\n return this.elements && this.elements[0];\n }\n\n resolveElementProperties(chart, options) {\n return resolveBoxAndLabelProperties(chart, options, true);\n }\n\n}\n\nEllipseAnnotation.id = 'ellipseAnnotation';\n\nEllipseAnnotation.defaults = {\n adjustScaleRange: true,\n backgroundShadowColor: 'transparent',\n borderDash: [],\n borderDashOffset: 0,\n borderShadowColor: 'transparent',\n borderWidth: 1,\n display: true,\n init: undefined,\n label: Object.assign({}, BoxAnnotation.defaults.label),\n rotation: 0,\n shadowBlur: 0,\n shadowOffsetX: 0,\n shadowOffsetY: 0,\n xMax: undefined,\n xMin: undefined,\n xScaleID: undefined,\n yMax: undefined,\n yMin: undefined,\n yScaleID: undefined,\n z: 0\n};\n\nEllipseAnnotation.defaultRoutes = {\n borderColor: 'color',\n backgroundColor: 'color'\n};\n\nEllipseAnnotation.descriptors = {\n label: {\n _fallback: true\n }\n};\n\nfunction pointInEllipse(p, ellipse, rotation, borderWidth) {\n const {width, height, centerX, centerY} = ellipse;\n const xRadius = width / 2;\n const yRadius = height / 2;\n\n if (xRadius <= 0 || yRadius <= 0) {\n return false;\n }\n // https://stackoverflow.com/questions/7946187/point-and-ellipse-rotated-position-test-algorithm\n const angle = toRadians(rotation || 0);\n const hBorderWidth = borderWidth / 2 || 0;\n const cosAngle = Math.cos(angle);\n const sinAngle = Math.sin(angle);\n const a = Math.pow(cosAngle * (p.x - centerX) + sinAngle * (p.y - centerY), 2);\n const b = Math.pow(sinAngle * (p.x - centerX) - cosAngle * (p.y - centerY), 2);\n return (a / Math.pow(xRadius + hBorderWidth, 2)) + (b / Math.pow(yRadius + hBorderWidth, 2)) <= 1.0001;\n}\n\nclass PointAnnotation extends Element {\n\n inRange(mouseX, mouseY, axis, useFinalPosition) {\n const {x, y, x2, y2, width} = this.getProps(['x', 'y', 'x2', 'y2', 'width'], useFinalPosition);\n const borderWidth = this.options.borderWidth;\n if (axis !== 'x' && axis !== 'y') {\n return inPointRange({x: mouseX, y: mouseY}, this.getCenterPoint(useFinalPosition), width / 2, borderWidth);\n }\n const hBorderWidth = borderWidth / 2;\n const limit = axis === 'y' ? {start: y, end: y2, value: mouseY} : {start: x, end: x2, value: mouseX};\n return limit.value >= limit.start - hBorderWidth && limit.value <= limit.end + hBorderWidth;\n }\n\n getCenterPoint(useFinalPosition) {\n return getElementCenterPoint(this, useFinalPosition);\n }\n\n draw(ctx) {\n const options = this.options;\n const borderWidth = options.borderWidth;\n if (options.radius < 0.1) {\n return;\n }\n ctx.save();\n ctx.fillStyle = options.backgroundColor;\n setShadowStyle(ctx, options);\n const stroke = setBorderStyle(ctx, options);\n drawPoint(ctx, this, this.centerX, this.centerY);\n if (stroke && !isImageOrCanvas(options.pointStyle)) {\n ctx.shadowColor = options.borderShadowColor;\n ctx.stroke();\n }\n ctx.restore();\n options.borderWidth = borderWidth;\n }\n\n resolveElementProperties(chart, options) {\n const properties = resolvePointProperties(chart, options);\n properties.initProperties = initAnimationProperties(chart, properties, options, true);\n return properties;\n }\n}\n\nPointAnnotation.id = 'pointAnnotation';\n\nPointAnnotation.defaults = {\n adjustScaleRange: true,\n backgroundShadowColor: 'transparent',\n borderDash: [],\n borderDashOffset: 0,\n borderShadowColor: 'transparent',\n borderWidth: 1,\n display: true,\n init: undefined,\n pointStyle: 'circle',\n radius: 10,\n rotation: 0,\n shadowBlur: 0,\n shadowOffsetX: 0,\n shadowOffsetY: 0,\n xAdjust: 0,\n xMax: undefined,\n xMin: undefined,\n xScaleID: undefined,\n xValue: undefined,\n yAdjust: 0,\n yMax: undefined,\n yMin: undefined,\n yScaleID: undefined,\n yValue: undefined,\n z: 0\n};\n\nPointAnnotation.defaultRoutes = {\n borderColor: 'color',\n backgroundColor: 'color'\n};\n\nclass PolygonAnnotation extends Element {\n\n inRange(mouseX, mouseY, axis, useFinalPosition) {\n if (axis !== 'x' && axis !== 'y') {\n return this.options.radius >= 0.1 && this.elements.length > 1 && pointIsInPolygon(this.elements, mouseX, mouseY, useFinalPosition);\n }\n const rotatedPoint = rotated({x: mouseX, y: mouseY}, this.getCenterPoint(useFinalPosition), toRadians(-this.options.rotation));\n const axisPoints = this.elements.map((point) => axis === 'y' ? point.bY : point.bX);\n const start = Math.min(...axisPoints);\n const end = Math.max(...axisPoints);\n return rotatedPoint[axis] >= start && rotatedPoint[axis] <= end;\n }\n\n getCenterPoint(useFinalPosition) {\n return getElementCenterPoint(this, useFinalPosition);\n }\n\n draw(ctx) {\n const {elements, options} = this;\n ctx.save();\n ctx.beginPath();\n ctx.fillStyle = options.backgroundColor;\n setShadowStyle(ctx, options);\n const stroke = setBorderStyle(ctx, options);\n let first = true;\n for (const el of elements) {\n if (first) {\n ctx.moveTo(el.x, el.y);\n first = false;\n } else {\n ctx.lineTo(el.x, el.y);\n }\n }\n ctx.closePath();\n ctx.fill();\n // If no border, don't draw it\n if (stroke) {\n ctx.shadowColor = options.borderShadowColor;\n ctx.stroke();\n }\n ctx.restore();\n }\n\n resolveElementProperties(chart, options) {\n const properties = resolvePointProperties(chart, options);\n const {sides, rotation} = options;\n const elements = [];\n const angle = (2 * PI) / sides;\n let rad = rotation * RAD_PER_DEG;\n for (let i = 0; i < sides; i++, rad += angle) {\n const elProps = buildPointElement(properties, options, rad);\n elProps.initProperties = initAnimationProperties(chart, properties, options);\n elements.push(elProps);\n }\n properties.elements = elements;\n return properties;\n }\n}\n\nPolygonAnnotation.id = 'polygonAnnotation';\n\nPolygonAnnotation.defaults = {\n adjustScaleRange: true,\n backgroundShadowColor: 'transparent',\n borderCapStyle: 'butt',\n borderDash: [],\n borderDashOffset: 0,\n borderJoinStyle: 'miter',\n borderShadowColor: 'transparent',\n borderWidth: 1,\n display: true,\n init: undefined,\n point: {\n radius: 0\n },\n radius: 10,\n rotation: 0,\n shadowBlur: 0,\n shadowOffsetX: 0,\n shadowOffsetY: 0,\n sides: 3,\n xAdjust: 0,\n xMax: undefined,\n xMin: undefined,\n xScaleID: undefined,\n xValue: undefined,\n yAdjust: 0,\n yMax: undefined,\n yMin: undefined,\n yScaleID: undefined,\n yValue: undefined,\n z: 0\n};\n\nPolygonAnnotation.defaultRoutes = {\n borderColor: 'color',\n backgroundColor: 'color'\n};\n\nfunction buildPointElement({centerX, centerY}, {radius, borderWidth}, rad) {\n const halfBorder = borderWidth / 2;\n const sin = Math.sin(rad);\n const cos = Math.cos(rad);\n const point = {x: centerX + sin * radius, y: centerY - cos * radius};\n return {\n type: 'point',\n optionScope: 'point',\n properties: {\n x: point.x,\n y: point.y,\n centerX: point.x,\n centerY: point.y,\n bX: centerX + sin * (radius + halfBorder),\n bY: centerY - cos * (radius + halfBorder)\n }\n };\n}\n\nfunction pointIsInPolygon(points, x, y, useFinalPosition) {\n let isInside = false;\n let A = points[points.length - 1].getProps(['bX', 'bY'], useFinalPosition);\n for (const point of points) {\n const B = point.getProps(['bX', 'bY'], useFinalPosition);\n if ((B.bY > y) !== (A.bY > y) && x < (A.bX - B.bX) * (y - B.bY) / (A.bY - B.bY) + B.bX) {\n isInside = !isInside;\n }\n A = B;\n }\n return isInside;\n}\n\nconst annotationTypes = {\n box: BoxAnnotation,\n ellipse: EllipseAnnotation,\n label: LabelAnnotation,\n line: LineAnnotation,\n point: PointAnnotation,\n polygon: PolygonAnnotation\n};\n\n/**\n * Register fallback for annotation elements\n * For example lineAnnotation options would be looked through:\n * - the annotation object (options.plugins.annotation.annotations[id])\n * - element options (options.elements.lineAnnotation)\n * - element defaults (defaults.elements.lineAnnotation)\n * - annotation plugin defaults (defaults.plugins.annotation, this is what we are registering here)\n */\nObject.keys(annotationTypes).forEach(key => {\n defaults.describe(`elements.${annotationTypes[key].id}`, {\n _fallback: 'plugins.annotation.common'\n });\n});\n\nconst directUpdater = {\n update: Object.assign\n};\n\nconst hooks$1 = eventHooks.concat(elementHooks);\nconst resolve = (value, optDefs) => isObject(optDefs) ? resolveObj(value, optDefs) : value;\n\n\n/**\n * @typedef { import(\"chart.js\").Chart } Chart\n * @typedef { import(\"chart.js\").UpdateMode } UpdateMode\n * @typedef { import('../../types/options').AnnotationPluginOptions } AnnotationPluginOptions\n */\n\n/**\n * @param {string} prop\n * @returns {boolean}\n */\nconst isIndexable = (prop) => prop === 'color' || prop === 'font';\n\n/**\n * Resolve the annotation type, checking if is supported.\n * @param {string} [type=line] - annotation type\n * @returns {string} resolved annotation type\n */\nfunction resolveType(type = 'line') {\n if (annotationTypes[type]) {\n return type;\n }\n console.warn(`Unknown annotation type: '${type}', defaulting to 'line'`);\n return 'line';\n}\n\n/**\n * @param {Chart} chart\n * @param {Object} state\n * @param {AnnotationPluginOptions} options\n * @param {UpdateMode} mode\n */\nfunction updateElements(chart, state, options, mode) {\n const animations = resolveAnimations(chart, options.animations, mode);\n\n const annotations = state.annotations;\n const elements = resyncElements(state.elements, annotations);\n\n for (let i = 0; i < annotations.length; i++) {\n const annotationOptions = annotations[i];\n const element = getOrCreateElement(elements, i, annotationOptions.type);\n const resolver = annotationOptions.setContext(getContext(chart, element, annotationOptions));\n const properties = element.resolveElementProperties(chart, resolver);\n\n properties.skip = toSkip(properties);\n\n if ('elements' in properties) {\n updateSubElements(element, properties.elements, resolver, animations);\n // Remove the sub-element definitions from properties, so the actual elements\n // are not overwritten by their definitions\n delete properties.elements;\n }\n\n if (!defined(element.x)) {\n // If the element is newly created, assing the properties directly - to\n // make them readily awailable to any scriptable options. If we do not do this,\n // the properties retruned by `resolveElementProperties` are available only\n // after options resolution.\n Object.assign(element, properties);\n }\n\n Object.assign(element, properties.initProperties);\n properties.options = resolveAnnotationOptions(resolver);\n\n animations.update(element, properties);\n }\n}\n\nfunction toSkip(properties) {\n return isNaN(properties.x) || isNaN(properties.y);\n}\n\nfunction resolveAnimations(chart, animOpts, mode) {\n if (mode === 'reset' || mode === 'none' || mode === 'resize') {\n return directUpdater;\n }\n return new Animations(chart, animOpts);\n}\n\nfunction updateSubElements(mainElement, elements, resolver, animations) {\n const subElements = mainElement.elements || (mainElement.elements = []);\n subElements.length = elements.length;\n for (let i = 0; i < elements.length; i++) {\n const definition = elements[i];\n const properties = definition.properties;\n const subElement = getOrCreateElement(subElements, i, definition.type, definition.initProperties);\n const subResolver = resolver[definition.optionScope].override(definition);\n properties.options = resolveAnnotationOptions(subResolver);\n animations.update(subElement, properties);\n }\n}\n\nfunction getOrCreateElement(elements, index, type, initProperties) {\n const elementClass = annotationTypes[resolveType(type)];\n let element = elements[index];\n if (!element || !(element instanceof elementClass)) {\n element = elements[index] = new elementClass();\n Object.assign(element, initProperties);\n }\n return element;\n}\n\nfunction resolveAnnotationOptions(resolver) {\n const elementClass = annotationTypes[resolveType(resolver.type)];\n const result = {};\n result.id = resolver.id;\n result.type = resolver.type;\n result.drawTime = resolver.drawTime;\n Object.assign(result,\n resolveObj(resolver, elementClass.defaults),\n resolveObj(resolver, elementClass.defaultRoutes));\n for (const hook of hooks$1) {\n result[hook] = resolver[hook];\n }\n return result;\n}\n\nfunction resolveObj(resolver, defs) {\n const result = {};\n for (const prop of Object.keys(defs)) {\n const optDefs = defs[prop];\n const value = resolver[prop];\n if (isIndexable(prop) && isArray(value)) {\n result[prop] = value.map((item) => resolve(item, optDefs));\n } else {\n result[prop] = resolve(value, optDefs);\n }\n }\n return result;\n}\n\nfunction getContext(chart, element, annotation) {\n return element.$context || (element.$context = Object.assign(Object.create(chart.getContext()), {\n element,\n id: annotation.id,\n type: 'annotation'\n }));\n}\n\nfunction resyncElements(elements, annotations) {\n const count = annotations.length;\n const start = elements.length;\n\n if (start < count) {\n const add = count - start;\n elements.splice(start, 0, ...new Array(add));\n } else if (start > count) {\n elements.splice(count, start - count);\n }\n return elements;\n}\n\nvar version = \"2.2.1\";\n\nconst chartStates = new Map();\nconst hooks = eventHooks.concat(elementHooks);\n\nvar annotation = {\n id: 'annotation',\n\n version,\n\n beforeRegister() {\n requireVersion('chart.js', '3.7', Chart.version);\n },\n\n afterRegister() {\n Chart.register(annotationTypes);\n },\n\n afterUnregister() {\n Chart.unregister(annotationTypes);\n },\n\n beforeInit(chart) {\n chartStates.set(chart, {\n annotations: [],\n elements: [],\n visibleElements: [],\n listeners: {},\n listened: false,\n moveListened: false,\n hooks: {},\n hooked: false,\n hovered: []\n });\n },\n\n beforeUpdate(chart, args, options) {\n const state = chartStates.get(chart);\n const annotations = state.annotations = [];\n\n let annotationOptions = options.annotations;\n if (isObject(annotationOptions)) {\n Object.keys(annotationOptions).forEach(key => {\n const value = annotationOptions[key];\n if (isObject(value)) {\n value.id = key;\n annotations.push(value);\n }\n });\n } else if (isArray(annotationOptions)) {\n annotations.push(...annotationOptions);\n }\n verifyScaleOptions(annotations, chart.scales);\n },\n\n afterDataLimits(chart, args) {\n const state = chartStates.get(chart);\n adjustScaleRange(chart, args.scale, state.annotations.filter(a => a.display && a.adjustScaleRange));\n },\n\n afterUpdate(chart, args, options) {\n const state = chartStates.get(chart);\n updateListeners(chart, state, options);\n updateElements(chart, state, options, args.mode);\n state.visibleElements = state.elements.filter(el => !el.skip && el.options.display);\n updateHooks(chart, state, options);\n },\n\n beforeDatasetsDraw(chart, _args, options) {\n draw(chart, 'beforeDatasetsDraw', options.clip);\n },\n\n afterDatasetsDraw(chart, _args, options) {\n draw(chart, 'afterDatasetsDraw', options.clip);\n },\n\n beforeDraw(chart, _args, options) {\n draw(chart, 'beforeDraw', options.clip);\n },\n\n afterDraw(chart, _args, options) {\n draw(chart, 'afterDraw', options.clip);\n },\n\n beforeEvent(chart, args, options) {\n const state = chartStates.get(chart);\n if (handleEvent(state, args.event, options)) {\n args.changed = true;\n }\n },\n\n afterDestroy(chart) {\n chartStates.delete(chart);\n },\n\n _getState(chart) {\n return chartStates.get(chart);\n },\n\n defaults: {\n animations: {\n numbers: {\n properties: ['x', 'y', 'x2', 'y2', 'width', 'height', 'centerX', 'centerY', 'pointX', 'pointY', 'radius'],\n type: 'number'\n },\n },\n clip: true,\n interaction: {\n mode: undefined,\n axis: undefined,\n intersect: undefined\n },\n common: {\n drawTime: 'afterDatasetsDraw',\n init: false,\n label: {\n }\n }\n },\n\n descriptors: {\n _indexable: false,\n _scriptable: (prop) => !hooks.includes(prop) && prop !== 'init',\n annotations: {\n _allKeys: false,\n _fallback: (prop, opts) => `elements.${annotationTypes[resolveType(opts.type)].id}`\n },\n interaction: {\n _fallback: true\n },\n common: {\n label: {\n _indexable: isIndexable,\n _fallback: true\n },\n _indexable: isIndexable\n }\n },\n\n additionalOptionScopes: ['']\n};\n\nfunction draw(chart, caller, clip) {\n const {ctx, chartArea} = chart;\n const state = chartStates.get(chart);\n\n if (clip) {\n clipArea(ctx, chartArea);\n }\n\n const drawableElements = getDrawableElements(state.visibleElements, caller).sort((a, b) => a.element.options.z - b.element.options.z);\n for (const item of drawableElements) {\n drawElement(ctx, chartArea, state, item);\n }\n\n if (clip) {\n unclipArea(ctx);\n }\n}\n\nfunction getDrawableElements(elements, caller) {\n const drawableElements = [];\n for (const el of elements) {\n if (el.options.drawTime === caller) {\n drawableElements.push({element: el, main: true});\n }\n if (el.elements && el.elements.length) {\n for (const sub of el.elements) {\n if (sub.options.display && sub.options.drawTime === caller) {\n drawableElements.push({element: sub});\n }\n }\n }\n }\n return drawableElements;\n}\n\nfunction drawElement(ctx, chartArea, state, item) {\n const el = item.element;\n if (item.main) {\n invokeHook(state, el, 'beforeDraw');\n el.draw(ctx, chartArea);\n invokeHook(state, el, 'afterDraw');\n } else {\n el.draw(ctx, chartArea);\n }\n}\n\nexport { annotation as default };\n","import { CategoryScale, Chart, LinearScale, TimeScale, Tooltip } from 'chart.js';\nimport 'chartjs-adapter-date-fns';\nimport AnnotationPlugin from 'chartjs-plugin-annotation';\n\nimport cssColors from '@feather/theme/cssColors';\nimport { typeface } from '@feather/typography';\n\nChart.defaults.color = cssColors('neutral-7') as string;\nChart.defaults.font.family = typeface.system;\nChart.defaults.font.size = 12;\n\nChart.register(TimeScale, CategoryScale, LinearScale, Tooltip, AnnotationPlugin);\n","import { QueryCache, QueryClient } from '@tanstack/react-query';\nimport axios from 'axios';\n\nimport { toast } from '@feather/components/notification';\nimport getErrorMessage from '@utils/getErrorMessage';\nimport logException from '@utils/logException';\n\nconst BLACKLISTED_ERROR_MESSAGES = ['Required permission validation failed'];\n\nexport const queryClient = new QueryClient({\n defaultOptions: { queries: { refetchOnWindowFocus: false, retry: false } },\n queryCache: new QueryCache({\n onError: (error, query) => {\n if (!query?.meta?.skipErrorToast) {\n if (query?.meta?.errorMessage) {\n toast.error({ message: query?.meta.errorMessage as string });\n } else {\n const message = getErrorMessage(error);\n if (BLACKLISTED_ERROR_MESSAGES.includes(message)) {\n return;\n }\n toast.error({ message });\n }\n }\n if (!axios.isAxiosError(error)) {\n logException(error);\n }\n },\n }),\n});\n","// eslint-disable-next-line no-restricted-imports\nimport { createAsyncThunk as createReduxAsyncThunk } from '@reduxjs/toolkit';\n\nimport type { AppDispatch, RootState } from '@/store';\n\nconst createAsyncThunk = createReduxAsyncThunk.withTypes<{\n state: RootState;\n dispatch: AppDispatch;\n}>();\n\nexport default createAsyncThunk;\n","export const getEditChannelRequestPayload = (data: EditChannelAPIPayload['data']) => {\n const payload = new FormData();\n\n Object.keys(data).forEach((key) => {\n const value = data[key];\n switch (key) {\n case 'cover_file':\n if (value) {\n payload.append('cover_file', value);\n }\n break;\n case 'data':\n if (value != null) {\n payload.append('data', value);\n }\n break;\n default:\n payload.append(key, value);\n }\n });\n\n return payload;\n};\n","/**\n * [Customer Request]\n * @description https://sendbird.slack.com/archives/C05A3EN7FTJ/p1730774503968449\n * Added code to separate APIs for Group Channel and Supergroup channel as requested by the customer.\n */\nexport const transformToSupergroupChannelUrl = (channelUrl: string) => {\n const isSupergroupChannel = window.location.pathname.includes('supergroup-channels');\n if (isSupergroupChannel) {\n return channelUrl.replace('group_channels', 'supergroup_channels');\n }\n\n return channelUrl;\n};\n","import type { AxiosResponse } from 'axios';\n\nimport { axios, getGateURL } from '@api/shared';\nimport { LIST_LIMIT } from '@constants';\nimport { fixedEncodeURIComponent } from '@utils';\nimport { snakeCaseKeys } from '@utils/ObjectKeyConverter';\n\nimport { getEditChannelRequestPayload } from '../utils/EditChannelUtils';\nimport { transformToSupergroupChannelUrl } from './utils';\n\nexport type InviteAsGroupChannelMemberParams = {\n appId: string;\n channelUrl: string;\n userIds: string[];\n};\n\nexport type InviteAsGroupChannelMemberError = {\n code: number;\n error: boolean;\n message: string;\n};\n\nexport const createOpenChannel: CreateOpenChannelAPI = ({ appId, data }) => {\n const payload = new FormData();\n Object.keys(data)\n .filter((key) => !!data[key])\n .forEach((key) => {\n payload.append(key, data[key]);\n });\n return axios.post(`${getGateURL()}/platform/v3/open_channels`, payload, {\n headers: {\n 'App-Id': appId,\n },\n });\n};\n\nexport const createGroupChannel: CreateGroupChannelAPI = ({ appId, params }) => {\n const payload = new FormData();\n Object.keys(params)\n .filter((key) => !!params[key])\n .forEach((key) => {\n payload.append(key, params[key]);\n });\n\n return axios.post(transformToSupergroupChannelUrl(`${getGateURL()}/platform/v3/group_channels`), payload, {\n headers: {\n 'App-Id': appId,\n },\n });\n};\n\nexport const fetchMetadata: FetchMetadataAPI = ({ appId, channelType, channel_url }) => {\n return axios.get(\n transformToSupergroupChannelUrl(`${getGateURL()}/platform/v3/${channelType}/${channel_url}/metadata`),\n {\n headers: {\n 'App-Id': appId,\n },\n },\n );\n};\nexport const setMetadata: SetMetadataAPI = async ({ appId, channelType, channel_url, deletes, payload }) => {\n const responses: AxiosResponse>[] = [];\n const errors: AxiosResponse[] = [];\n\n if (Object.entries(deletes).length > 0) {\n responses.push(\n ...((\n await Promise.all(\n deletes.map((key) =>\n axios\n .delete(\n transformToSupergroupChannelUrl(\n `${getGateURL()}/platform/v3/${channelType}/${channel_url}/metadata/${key}`,\n ),\n {\n headers: {\n 'App-Id': appId,\n },\n },\n )\n .catch((error) => {\n if (error?.response?.data?.code === 400201) {\n // Resource not found. Because it's a DELETE request, ignore this error\n return null;\n }\n errors.push(error);\n return null;\n }),\n ),\n )\n ).filter((response) => response) as ReadonlyArray),\n );\n }\n\n const upsertMetadataResponse = await axios\n .put(\n transformToSupergroupChannelUrl(`${getGateURL()}/platform/v3/${channelType}/${channel_url}/metadata`),\n {\n metadata: payload,\n upsert: true,\n },\n {\n headers: {\n 'App-Id': appId,\n },\n },\n )\n .catch((error) => {\n errors.push(error);\n return null;\n });\n\n if (upsertMetadataResponse) {\n responses.push(upsertMetadataResponse);\n }\n\n return { responses, errors };\n};\n\nexport const editChannel: EditChannelAPI = ({ appId, channelUrl, channelType, data }) => {\n const payload = getEditChannelRequestPayload(data);\n\n return axios.put(\n transformToSupergroupChannelUrl(`${getGateURL()}/platform/v3/${channelType}/${channelUrl}`),\n payload,\n {\n headers: {\n 'App-Id': appId,\n },\n },\n );\n};\n\nexport const deleteChannel: DeleteChannelAPI = ({ appId, channelType, channel_url }) => {\n return axios.delete(transformToSupergroupChannelUrl(`${getGateURL()}/platform/v3/${channelType}/${channel_url}`), {\n headers: {\n 'App-Id': appId,\n },\n });\n};\n\nexport const fetchOpenChannels: FetchOpenChannelsAPI = ({ appId, listToken }) => {\n return axios.get(`${getGateURL()}/platform/v3/open_channels?token=${listToken}&limit=${LIST_LIMIT}`, {\n headers: {\n 'App-Id': appId,\n },\n });\n};\n\nexport const searchOpenChannels: SearchOpenChannelsAPI = ({ appId, queryOptions = '', ...params }) => {\n return axios.get(`${getGateURL()}/platform/v3/open_channels${queryOptions}`, {\n params,\n headers: {\n 'App-Id': appId,\n },\n });\n};\n\nexport const fetchOpenChannel: FetchOpenChannelAPI = ({ appId, channel_url }) => {\n return axios.get(`${getGateURL()}/platform/v3/open_channels/${channel_url}`, {\n headers: {\n 'App-Id': appId,\n },\n });\n};\n\nexport const fetchClassicOpenChannelMigrationStatus: FetchClassicOpenChannelMigrationStatusAPI = ({ appId }) => {\n return axios.get(`${getGateURL()}/platform/v3/open_channels/migrate_classic_open_channels`, {\n headers: {\n 'App-Id': appId,\n },\n });\n};\n\nexport const startClassicOpenChannelMigration: StartClassicOpenChannelMigrationAPI = ({ appId }) => {\n return axios.post(\n `${getGateURL()}/platform/v3/open_channels/migrate_classic_open_channels`,\n {},\n { headers: { 'App-Id': appId } },\n );\n};\n\nexport const fetchGroupChannels: FetchGroupChannelsAPI = ({\n appId,\n listToken: token,\n limit,\n customType,\n order,\n showEmpty,\n superMode,\n}) => {\n return axios.get(transformToSupergroupChannelUrl(`${getGateURL()}/platform/v3/group_channels`), {\n headers: { 'App-Id': appId },\n params: snakeCaseKeys({ token, limit, customType, showEmpty, order, superMode }),\n });\n};\n\nexport const searchGroupChannels: SearchGroupChannelsAPI = ({\n appId,\n queryOptions = '',\n listToken: token,\n limit,\n showEmpty,\n order,\n superMode,\n}) => {\n return axios.get(transformToSupergroupChannelUrl(`${getGateURL()}/platform/v3/group_channels${queryOptions}`), {\n headers: {\n 'App-Id': appId,\n },\n params: snakeCaseKeys({ token, limit, showEmpty, order, superMode }),\n });\n};\n\nexport const fetchMyGroupChannels: FetchMyGroupChannelsAPI = ({\n appId,\n userId,\n listToken: token,\n limit,\n showEmpty,\n membersExactlyIn,\n channelUrls,\n order,\n superMode,\n}) => {\n return axios.get(\n transformToSupergroupChannelUrl(\n `${getGateURL()}/platform/v3/users/${fixedEncodeURIComponent(userId)}/my_group_channels`,\n ),\n {\n headers: {\n 'App-Id': appId,\n },\n params: {\n token,\n limit,\n order,\n show_empty: showEmpty,\n super_mode: superMode,\n members_exactly_in: membersExactlyIn?.map((userId) => fixedEncodeURIComponent(userId)).join(','),\n channel_urls: channelUrls?.map((url) => fixedEncodeURIComponent(url)).join(','),\n },\n },\n );\n};\n\nexport const fetchGroupChannel: FetchGroupChannelAPI = ({ appId, channel_url }) => {\n return axios.get(transformToSupergroupChannelUrl(`${getGateURL()}/platform/v3/group_channels/${channel_url}`), {\n headers: {\n 'App-Id': appId,\n },\n });\n};\nexport const inviteAsGroupChannelMember = ({ appId, channelUrl, userIds }: InviteAsGroupChannelMemberParams) =>\n axios.post(\n transformToSupergroupChannelUrl(`${getGateURL()}/platform/v3/group_channels/${channelUrl}/invite`),\n { user_ids: userIds },\n {\n headers: {\n 'App-Id': appId,\n },\n },\n );\n","import type { RootState } from '@/store';\n\nexport const selectApplicationData = (state: RootState) => state.applicationState.data || ({} as Application);\n","/*\n *\n * Alert Messages\n *\n */\n\n// auth\nexport const ALERT_EMAIL_INVALID = 'Your email address is invalid. Please enter a valid address.';\n\n// application\nexport const ALERT_APPLICATION_NAME_CHANGED = 'Application name has been changed.';\n\n// billing\nexport const ALERT_CARD_AGGREMENT_REQUIRED = 'You have to agree with the terms and privacy policy.';\n\n// authorization\nexport const ALERT_NOT_ALLOWED_FEATURE =\n 'The feature is not available on your current plan. Please consult the sales team through the website or dashboard.';\n\n// channel\nexport const ALERT_CHANNEL_CREATED = 'Channel has been created.';\nexport const ALERT_CHANNEL_DELETED = 'Channel has been deleted.';\nexport const ALERT_CHANNEL_IS_REQUIRED = 'Please select at least one channel.';\nexport const ALERT_ADMIN_MESSAGE_SENT = 'Admin message has been sent successfully.';\nexport const ALERT_ADMIN_MESSAGE_LENGTH = 'Admin messages should not be longer than 1000 characters.';\n\n// analytics\nexport const ALERT_ANALYTICS_DATE_RANGE_92 = 'Daily date selection can not exceed 92 days.';\n\n// reports\nexport const ALERT_REPORTS_DATE_RANGE_31 = 'Daily date selection can not exceed 31 days.';\n\n// settings\nexport const ALERT_SETTINGS_PUSH_ENABLED = 'Push notifications turned on.';\nexport const ALERT_SETTINGS_PUSH_DISABLED = 'Push notifications turned off.';\nexport const ALERT_SETTINGS_ACCESS_TOKEN_POLICY = 'Access token user policy has been changed.';\nexport const ALERT_SETTINGS_WEBHOOKS = 'Webhooks configuration has been changed.';\nexport const ALERT_SETTINGS_DISPLAY_PAST_MESSAGE_ON = 'Chat history turned on';\nexport const ALERT_SETTINGS_DISPLAY_PAST_MESSAGE_OFF = 'Chat history turned off';\nexport const ALERT_SETTINGS_AUTO_EVENT_MESSAGE = 'Auto message settings changed.';\nexport const ALERT_SETTINGS_CREDENTIAL_FILTER_ADDED = 'Allowed domain added.';\nexport const ALERT_SETTINGS_CREDENTIAL_FILTER_DELETED = 'Allowed domain removed.';\nexport const ALERT_SETTINGS_MAX_LENGTH_OF_MESSAGE = 'Max length has been changed.';\nexport const ALERT_SETTINGS_APPLICATION_DELETED = 'Application deleted.';\nexport const ALERT_SETTINGS_PUSH_NOTIFICATION_TEMPLATES = 'Push notification message template has been saved.';\nexport const ALERT_SETTINGS_APNS_CERT_ERROR = 'Failed to upload the cert file. Please check the file format again.';\n// general\nexport const ALERT_COPY_SUCCESS = 'Copied.';\nexport const ALERT_BAD_REQUEST = 'Bad request';\n\n// dialog\nexport const ALERT_DIALOG_ADMIN_MESSAGE_LIMITED = 'You need to upgrade your plan to use admin message.';\n\n/*\n *\n * Descriptions\n *\n */\n\nexport const DESC_DIALOG_ADMIN_MESSAGE =\n 'Admin Message allows you to send administrative messages (such as announcements) to multiple channels at a time. Please select target channels and type your message.';\nexport const DESC_DIALOG_ADMIN_MESSAGE_LIMITED = 'You can only send a test message on Free Plan.';\nexport const DESC_DIALOG_ADMIN_MESSAGE_LENGTH = 'Admin message should not be longer than 1000 characters';\nexport const DESC_DIALOG_DELETE_CHANNELS = 'Do you want to delete these channels?';\n\n/*\n *\n * Placeholder\n *\n */\nexport const PH_SEARCH_CHANNELS = 'Search';\nexport const PH_DIALOG_ADMIN_MESSAGE_LIMITED = 'TEST MESSAGE : You can not modify this message on Free Plan';\n\n// Converts a `snake_cased` string to a `Title case` string.\nexport const snakeCaseToTitleCase = (snakeCaseString: string) => {\n const words = snakeCaseString.split('_');\n const capitalizedFirstWord = words[0].charAt(0).toUpperCase() + words[0].slice(1);\n const remainingWords = words.slice(1);\n const titleCaseString = [capitalizedFirstWord, ...remainingWords].join(' ');\n return titleCaseString;\n};\n","import axios from 'axios';\n\nimport { toast } from '@feather/components/notification';\nimport { isStaging } from '@utils';\nimport getErrorMessage from '@utils/getErrorMessage';\n\nconst toastBadRequestWarning = (error: any) => {\n if (isStaging()) {\n // eslint-disable-next-line no-console\n console.log(error);\n }\n if (axios.isAxiosError(error) && error?.response) {\n toast.warning({ message: getErrorMessage(error) });\n }\n};\n\nexport default toastBadRequestWarning;\n","import { createAction } from '@reduxjs/toolkit';\nimport axios from 'axios';\n\nimport { browserRouter } from '@/browserRouter';\nimport createAsyncThunk from '@/redux/createAsyncThunk';\nimport {\n createOpenChannel,\n deleteChannel,\n fetchGroupChannel,\n fetchGroupChannels,\n fetchMyGroupChannels,\n fetchOpenChannel,\n fetchOpenChannels,\n searchGroupChannels,\n searchOpenChannels,\n} from '@chat/api/channels';\nimport { DialogsActions } from '@common/redux/actions/dialogs';\nimport { LIST_LIMIT } from '@constants';\nimport { GroupChannelSearchOperator } from '@constants/core';\nimport { OpenChannelSearchOperator } from '@constants/core';\nimport { selectApplicationData } from '@core/redux/selectors/applicationState';\nimport { toast } from '@feather/components/notification';\nimport { fixedEncodeURIComponent } from '@utils/generals';\nimport logException from '@utils/logException';\nimport { ALERT_CHANNEL_CREATED, ALERT_CHANNEL_DELETED } from '@utils/text';\nimport toastBadRequestWarning from '@utils/toastBadRequestWarning';\n\nconst fetchOpenChannelsAction = createAsyncThunk<\n { channels: SendbirdChatChannel.OpenChannel[]; next: string; init: boolean },\n { init: boolean }\n>('chat/channels/fetchOpenChannels', async (payload, { dispatch, getState, rejectWithValue }) => {\n const appId = selectApplicationData(getState()).app_id;\n const { init } = payload;\n const listToken = init ? '' : getState().openChannels.next || '';\n\n try {\n const { data } = await fetchOpenChannels({ appId, listToken });\n\n return {\n channels: data.channels,\n next: data.next,\n init,\n };\n } catch (error) {\n if (axios.isAxiosError(error)) {\n if (error.response?.status === 400) {\n dispatch(fetchOpenChannelsAction({ init: true }));\n } else {\n toastBadRequestWarning(error);\n }\n return rejectWithValue(null);\n }\n\n logException(error);\n return rejectWithValue(null);\n }\n});\n\nexport const ChannelsActions = {\n // Channels\n deleteChannels: createAsyncThunk<\n boolean,\n { channelType: SendbirdChatChannel.ChannelType; channels: readonly SendbirdChatChannel.BaseChannel[] }\n >('chat/channels/deleteChannels', async (payload, { dispatch, getState, rejectWithValue }) => {\n const appId = selectApplicationData(getState()).app_id;\n const { channels, channelType } = payload;\n\n try {\n dispatch(DialogsActions.setIsFetching(true));\n const results = await Promise.all(\n channels.map((channel) =>\n deleteChannel({ appId, channelType, channel_url: channel.channel_url }).then(\n () => ({ isError: false, error: null }),\n (error) => ({ isError: true, error }),\n ),\n ),\n );\n\n const errors = results.filter((result) => result?.isError);\n errors.forEach(({ error }) => toastBadRequestWarning(error));\n const isDeletedAtLeastOne = errors.length < results.length;\n if (isDeletedAtLeastOne) {\n toast.success({ message: ALERT_CHANNEL_DELETED });\n dispatch(DialogsActions.hideDialog());\n }\n return isDeletedAtLeastOne;\n } catch (error) {\n logException(error);\n return rejectWithValue(error);\n } finally {\n dispatch(DialogsActions.setIsFetching(false));\n }\n }),\n\n // Open channels\n fetchOpenChannels: fetchOpenChannelsAction,\n\n searchOpenChannels: createAsyncThunk<\n { channels: SendbirdChatChannel.OpenChannel[]; next: string; init?: boolean; query: string },\n { option: OpenChannelSearchOperator; query: string; init?: boolean }\n >('chat/channels/searchOpenChannels', async (payload, { getState, rejectWithValue }) => {\n const appId = selectApplicationData(getState()).app_id;\n const { option, query, init } = payload;\n const listToken = init ? '' : getState().openChannels.next || '';\n const getQueryOptions = ({ option, query, listToken }) => {\n const tokenAndLimit = `&token=${listToken}&limit=${LIST_LIMIT}`;\n\n if (option === OpenChannelSearchOperator.urlEquals) {\n return `/${fixedEncodeURIComponent(query)}`;\n }\n if (option === OpenChannelSearchOperator.nameContains) {\n return `?name_contains=${fixedEncodeURIComponent(query)}${tokenAndLimit}`;\n }\n if (option === OpenChannelSearchOperator.customTypeEquals) {\n return `?custom_type=${fixedEncodeURIComponent(query)}${tokenAndLimit}`;\n }\n return '';\n };\n const queryOptions = getQueryOptions({ option, query, listToken });\n\n try {\n const { data } = await searchOpenChannels({ appId, queryOptions });\n\n return {\n channels: 'channels' in data ? data.channels : [data],\n next: 'next' in data ? data.next : '',\n init,\n query,\n };\n } catch (error) {\n if (axios.isAxiosError(error)) {\n const errorData = error.response?.data as { code: number } | undefined;\n if (option === OpenChannelSearchOperator.urlEquals && errorData?.code === 400201) {\n return {\n channels: [],\n next: '',\n init,\n query,\n };\n }\n\n toastBadRequestWarning(error);\n return rejectWithValue(null);\n }\n\n logException(error);\n toastBadRequestWarning(error);\n return rejectWithValue(null);\n }\n }),\n setOpenChannelSearchQuery: createAction('chat/channels/setOpenChannelSearchQuery'),\n setOpenChannelSearchState: createAction('chat/channels/setOpenChannelSearchState'),\n setOpenChannelSearchSuccess: createAction('chat/channels/setOpenChannelSearchSuccess'),\n setOpenChannelSearchOption: createAction('chat/channels/setOpenChannelSearchOption'),\n\n updateOpenChannelInList: createAction('chat/channels/updateOpenChannelInList'),\n deleteOpenChannelInList: createAction(\n 'chat/channels/deleteOpenChannelInList',\n ),\n\n setCurrentOpenChannel: createAction('chat/channels/setCurrentOpenChannel'),\n createOpenChannel: createAsyncThunk<\n SendbirdChatChannel.OpenChannel,\n {\n data: Pick & {\n cover_file: File | null;\n };\n }\n >('chat/channels/createOpenChannel', async (payload, { dispatch, getState, rejectWithValue }) => {\n const appId = selectApplicationData(getState()).app_id;\n\n try {\n dispatch(DialogsActions.setIsFetching(true));\n const { data } = await createOpenChannel({ appId, data: payload.data });\n\n toast.success({ message: ALERT_CHANNEL_CREATED });\n dispatch(ChannelsActions.fetchOpenChannels({ init: true }));\n dispatch(DialogsActions.hideDialog());\n\n return data;\n } catch (error) {\n if (axios.isAxiosError(error)) {\n toastBadRequestWarning(error);\n return rejectWithValue(error || '');\n }\n\n logException(error);\n return rejectWithValue(error);\n } finally {\n dispatch(DialogsActions.setIsFetching(false));\n }\n }),\n fetchOpenChannel: createAsyncThunk(\n 'chat/channels/fetchOpenChannel',\n async (payload, { dispatch, getState, rejectWithValue }) => {\n const appId = selectApplicationData(getState()).app_id;\n const channel_url = payload;\n\n try {\n const { data } = await fetchOpenChannel({ appId, channel_url });\n\n dispatch(ChannelsActions.setCurrentOpenChannel(data));\n } catch (error) {\n if (axios.isAxiosError(error)) {\n const errorData = error.response?.data as { code: number } | undefined;\n if (errorData?.code === 400201) {\n // channel not found\n browserRouter.navigate(`/${appId}/open-channels`);\n toastBadRequestWarning(error);\n return rejectWithValue(error);\n }\n\n logException(error);\n return rejectWithValue(error);\n }\n }\n },\n ),\n\n // Group channels\n fetchGroupChannels: createAsyncThunk<\n { channels: SendbirdChatChannel.GroupChannel[]; next: string; init: boolean },\n { init: boolean; superMode?: GroupChannelSuperMode }\n >('chat/channels/fetchGroupChannels', async (payload, { getState, rejectWithValue }) => {\n const appId = selectApplicationData(getState()).app_id;\n const init = !!payload.init;\n const { showEmptyChannels, next, order } = getState().groupChannels;\n const listToken = init ? '' : next;\n\n try {\n const { data } = await fetchGroupChannels({\n appId,\n listToken,\n limit: LIST_LIMIT,\n showEmpty: showEmptyChannels,\n order,\n superMode: payload.superMode,\n });\n\n return {\n channels: data.channels,\n next: data.next,\n init,\n };\n } catch (error) {\n if (axios.isAxiosError(error)) {\n toastBadRequestWarning(error);\n return rejectWithValue(error);\n }\n\n logException(error);\n toastBadRequestWarning(error);\n return rejectWithValue(error);\n }\n }),\n\n searchGroupChannels: createAsyncThunk<\n { channels: SendbirdChatChannel.GroupChannel[]; next: string; init?: boolean; query: string },\n { option: GroupChannelSearchOperator; query: string; init?: boolean; superMode?: GroupChannelSuperMode }\n >('chat/channels/searchGroupChannels', async (payload, { getState, rejectWithValue }) => {\n const appId = selectApplicationData(getState()).app_id;\n const { option, query, init, superMode } = payload;\n const { next, showEmptyChannels, order } = getState().groupChannels;\n const listToken = init ? '' : next;\n\n const params = { appId, listToken, limit: LIST_LIMIT, showEmpty: showEmptyChannels, order, superMode };\n\n let queryOptions = '';\n let request: ReturnType;\n if (\n option === GroupChannelSearchOperator.userIdEquals ||\n (option === GroupChannelSearchOperator.membersIncludeIn && !query.includes(','))\n ) {\n // should use list my group channels API to avoid slow queries\n request = fetchMyGroupChannels({ ...params, userId: query.trim() });\n } else {\n if (option === GroupChannelSearchOperator.urlEquals) {\n queryOptions = `channel_urls=${fixedEncodeURIComponent(query)}`;\n } else if (option === GroupChannelSearchOperator.nicknameEquals) {\n queryOptions = `members_nickname=${fixedEncodeURIComponent(query)}`;\n } else if (option === GroupChannelSearchOperator.customTypeEquals) {\n queryOptions = `custom_type=${fixedEncodeURIComponent(query)}`;\n } else if (option === GroupChannelSearchOperator.nameEquals) {\n queryOptions = `name=${fixedEncodeURIComponent(query)}`;\n } else if (option === GroupChannelSearchOperator.nameStartswith) {\n queryOptions = `name_startswith=${fixedEncodeURIComponent(query)}`;\n } else if (option === GroupChannelSearchOperator.membersIncludeIn) {\n const encodedUserIds = query\n .split(',')\n .map((id) => fixedEncodeURIComponent(id.trim()))\n .join(',');\n queryOptions = `members_include_in=${encodedUserIds}&query_type=AND`;\n }\n\n request = searchGroupChannels({ ...params, queryOptions: queryOptions && `?${queryOptions}` });\n }\n\n try {\n const { data } = await request;\n\n return {\n channels: data.channels,\n next: data.next,\n init,\n query,\n };\n } catch (error) {\n if (axios.isAxiosError(error)) {\n toastBadRequestWarning(error);\n return rejectWithValue(error);\n }\n\n logException(error);\n return rejectWithValue(error);\n }\n }),\n setGroupChannelSearchQuery: createAction('chat/channels/setGroupChannelSearchQuery'),\n setGroupChannelSearchState: createAction('chat/channels/setGroupChannelSearchState'),\n setGroupChannelSearchSuccess: createAction('chat/channels/setGroupChannelSearchSuccess'),\n setGroupChannelSearchOption: createAction('chat/channels/setGroupChannelSearchOption'),\n setGroupChannelShowEmptyChannels: createAction('chat/channels/setGroupChannelShowEmptyChannels'),\n setGroupChannelsSortOrder: createAction(\n 'chat/channels/setGroupChannelsSortOrder',\n ),\n\n updateGroupChannelInList: createAction('chat/channels/updateGroupChannelInList'),\n deleteGroupChannelInList: createAction(\n 'chat/channels/deleteGroupChannelInList',\n ),\n\n setCurrentGroupChannel: createAction('chat/channels/setCurrentGroupChannel'),\n fetchGroupChannel: createAsyncThunk(\n 'chat/channels/fetchGroupChannel',\n async (payload, { dispatch, getState, rejectWithValue }) => {\n const appId = selectApplicationData(getState()).app_id;\n const channel_url = payload;\n\n try {\n const { data } = await fetchGroupChannel({ appId, channel_url });\n\n dispatch(ChannelsActions.setCurrentGroupChannel(data));\n } catch (error) {\n if (axios.isAxiosError(error)) {\n const errorData = error.response?.data as { code: number } | undefined;\n if (errorData?.code === 400201) {\n // channel not found\n browserRouter.navigate(`/${appId}/group-channels`);\n toastBadRequestWarning(error);\n return rejectWithValue(error);\n }\n\n logException(error);\n return rejectWithValue(error);\n }\n }\n },\n ),\n};\n","import type { CancellableAxiosPromise } from '@api/cancellableAxios';\nimport { axios, getGateURL, getGateURLWithRegion } from '@api/shared';\nimport { fixedEncodeURIComponent } from '@utils';\nimport { snakeCaseKeys } from '@utils/ObjectKeyConverter';\n\nimport { transformToSupergroupChannelUrl } from './utils';\n\nexport const sendAdminMessageWithModeratorInfo: SendAdminMessageWithModeratorInfoAPI = ({\n appId,\n channelUrls,\n channelType,\n message,\n sendPush,\n moderator,\n // FIXME: this is temporary solution for Kakao Ent. This should be removed when BE will work on it and send correct sdkUser data .\n // following issue: https://sendbird.atlassian.net/browse/DBP-1281\n}) => {\n return axios.post(\n transformToSupergroupChannelUrl(`${getGateURLWithRegion()}/platform/dapi/channels/${channelType}/admin_message/`),\n {\n message,\n channel_urls: channelUrls,\n send_push: sendPush,\n moderator,\n },\n {\n headers: {\n 'App-Id': appId,\n },\n },\n );\n};\n\nexport const editMessage: EditMessageAPI = ({ appId, channelType, channelURL, messageId, payload }) => {\n return axios.put(\n transformToSupergroupChannelUrl(\n `${getGateURLWithRegion()}/platform/v3/${channelType}/${channelURL}/messages/${messageId}`,\n ),\n payload,\n {\n headers: {\n 'App-Id': appId,\n },\n },\n );\n};\n\nexport const fetchChannelThreadMessages: FetchChannelThreadMessagesAPI = ({\n appId,\n channelType,\n channelUrl,\n parentMessageId,\n messageTs,\n include = true, // if include is true, the response will include the message whose `createdAt` equals `messageTs`.\n prevLimit,\n nextLimit,\n operatorFilter,\n includeRemoved = false,\n withSortedMetaArray = true,\n}) =>\n axios.get(\n transformToSupergroupChannelUrl(`${getGateURLWithRegion()}/platform/dapi/${channelType}/${channelUrl}/messages`),\n {\n headers: {\n 'App-Id': appId,\n },\n params: {\n ...snakeCaseKeys({\n prevLimit,\n nextLimit,\n parentMessageId,\n messageTs,\n operatorFilter,\n withSortedMetaArray,\n }),\n include,\n include_reply_type: 'ALL',\n include_thread_info: true,\n presigned_file_url: true,\n including_removed: includeRemoved,\n },\n },\n );\n\nexport const fetchChannelMessages: FetchChannelMessagesAPI = ({\n appId,\n channelUrl,\n channelType,\n messageId,\n senderIds,\n userId,\n ts,\n prevLimit,\n nextLimit,\n operatorFilter = 'all',\n include,\n includeReplyType,\n includeParentMessageInfo,\n includeThreadInfo,\n includeRemoved = false,\n withSortedMetaArray = true,\n endpoint = transformToSupergroupChannelUrl(\n `${getGateURLWithRegion()}/platform/dapi/${channelType}/${channelUrl}/messages`,\n ),\n}) => {\n // Use dapi to bypass Soda's premium feature check logic about Message Retrieval\n return axios.get(endpoint, {\n headers: {\n 'App-Id': appId,\n },\n params: {\n ...snakeCaseKeys({\n messageId,\n senderIds,\n prevLimit,\n nextLimit,\n operatorFilter,\n includeReplyType,\n includeParentMessageInfo,\n includeThreadInfo,\n withSortedMetaArray,\n userId,\n }),\n message_ts: ts,\n include,\n presigned_file_url: true,\n including_removed: includeRemoved,\n },\n });\n};\n\nexport const fetchGroupChannelsMessagesTotalCount: FetchGroupChannelsMessagesTotalCountAPI = ({ appId, channelUrl }) =>\n axios.get(\n transformToSupergroupChannelUrl(`${getGateURL()}/platform/v3/group_channels/${channelUrl}/messages/total_count`),\n {\n headers: {\n 'App-Id': appId,\n },\n },\n );\n\nexport const fetchGroupChannelMembers: FetchGroupChannelMembersAPI = ({ appId, channelUrl, params }) => {\n return axios.get(\n transformToSupergroupChannelUrl(`${getGateURL()}/platform/v3/group_channels/${channelUrl}/members`),\n {\n params,\n headers: { 'App-Id': appId },\n },\n );\n};\n\nexport const fetchOpenChannelParticipants = ({\n appId,\n channelUrl,\n params,\n}: {\n appId: string;\n channelUrl: string;\n params: { token?: string; limit?: number };\n}) => {\n return axios.get<{ next: string; participants: SendbirdChatChannel.OpenChannelParticipant[] }>(\n `${getGateURL()}/platform/v3/open_channels/${channelUrl}/participants`,\n {\n params,\n headers: { 'App-Id': appId },\n },\n );\n};\n\nexport const fetchChannelBannedUsers = ({\n appId,\n channelUrl,\n token,\n limit,\n channelType,\n showTotalBanCount,\n}: {\n appId: string;\n channelUrl: string;\n token: string;\n limit: number;\n channelType: SendbirdChatChannel.ChannelType;\n showTotalBanCount: boolean;\n}) => {\n return axios.get<{\n banned_list: BannedUserListItem[];\n total_ban_count?: number;\n next: string;\n }>(transformToSupergroupChannelUrl(`${getGateURL()}/platform/v3/${channelType}/${channelUrl}/ban`), {\n params: snakeCaseKeys({ token, limit, showTotalBanCount }),\n headers: { 'App-Id': appId },\n });\n};\n\nexport const fetchChannelMutedUsers = ({\n appId,\n channelUrl,\n token,\n limit,\n channelType,\n showTotalMuteCount,\n}: {\n appId: string;\n channelUrl: string;\n token: string;\n limit: number;\n channelType: SendbirdChatChannel.ChannelType;\n showTotalMuteCount: boolean;\n}) => {\n return axios.get<{\n muted_list: MutedUserListItem[];\n total_mute_count?: number;\n next: string;\n }>(transformToSupergroupChannelUrl(`${getGateURL()}/platform/v3/${channelType}/${channelUrl}/mute`), {\n params: snakeCaseKeys({ token, limit, showTotalMuteCount }),\n headers: { 'App-Id': appId },\n });\n};\n\nexport const muteUser = ({ appId, channelType, channelUrl, userId, seconds, description }: MuteUserParams) => {\n return axios.post(\n transformToSupergroupChannelUrl(`${getGateURL()}/platform/v3/${channelType}/${channelUrl}/mute`),\n { user_id: userId, seconds, description },\n { headers: { 'App-Id': appId } },\n );\n};\n1;\n\nexport const unmuteUser = ({ appId, channelType, channelUrl, userId }: UnmuteUserParams) => {\n return axios.delete<{}>(\n transformToSupergroupChannelUrl(\n `${getGateURL()}/platform/v3/${channelType}/${channelUrl}/mute/${fixedEncodeURIComponent(userId)}`,\n ),\n {\n headers: {\n 'App-Id': appId,\n },\n },\n );\n};\n\nexport const banUser = ({ appId, channelUrl, payload, channelType }: BanUserParams) => {\n return axios.post(`${getGateURL()}/platform/v3/${channelType}/${channelUrl}/ban`, payload, {\n headers: {\n 'App-Id': appId,\n },\n });\n};\n\nexport const unbanUser = ({ appId, channelUrl, userId, channelType }: UnbanUserParams) => {\n return axios.delete<{}>(\n transformToSupergroupChannelUrl(\n `${getGateURL()}/platform/v3/${channelType}/${channelUrl}/ban/${fixedEncodeURIComponent(userId)}`,\n ),\n {\n headers: {\n 'App-Id': appId,\n },\n },\n );\n};\n\nexport const freezeChannel = ({\n appId,\n channelUrl,\n channelType,\n freeze,\n}: CoreAPIPayload<{\n channelType: T;\n channelUrl: string;\n freeze: boolean;\n}>): CancellableAxiosPromise<\n T extends 'open_channels' ? SendbirdChatChannel.OpenChannel : SendbirdChatChannel.GroupChannel\n> => {\n return axios.put(\n transformToSupergroupChannelUrl(`${getGateURL()}/platform/v3/${channelType}/${channelUrl}/freeze`),\n {\n freeze,\n },\n {\n headers: {\n 'App-Id': appId,\n },\n },\n );\n};\n\nexport const updateOperators = ({ appId, channelType, channelUrl, userIds }: UpdateOperatorsParams) => {\n return axios.post(\n transformToSupergroupChannelUrl(`${getGateURL()}/platform/v3/${channelType}/${channelUrl}/operators`),\n { operator_ids: userIds },\n {\n headers: {\n 'App-Id': appId,\n },\n },\n );\n};\n\nexport const getBanDetail = ({ appId, channelUrl, userId, channelType }: GetBanDetailParams) => {\n return axios\n .get(\n transformToSupergroupChannelUrl(\n `${getGateURL()}/platform/v3/${channelType}/${channelUrl}/ban/${fixedEncodeURIComponent(userId)}`,\n ),\n {\n headers: {\n 'App-Id': appId,\n },\n },\n )\n .then(\n (response) =>\n 'user' in response.data\n ? { ...response, data: { is_banned: true, data: response.data } }\n : { ...response, data: { is_banned: false } },\n (error) => {\n if (error.response) {\n if (\n error.response.status === 400 &&\n error.response.data?.code === 400201 &&\n error.response.data?.message === '\"User\" not found.'\n ) {\n error.response.status = 200;\n error.response.data = { is_banned: false };\n return error.response;\n }\n }\n throw error;\n },\n );\n};\n\nexport const getMuteDetail = ({ appId, channelUrl, userId, channelType }: GetMuteDetailParams) => {\n return axios\n .get(\n transformToSupergroupChannelUrl(\n `${getGateURL()}/platform/v3/${channelType}/${channelUrl}/mute/${fixedEncodeURIComponent(userId)}`,\n ),\n {\n headers: {\n 'App-Id': appId,\n },\n },\n )\n .catch((error) => {\n if (error.response) {\n if (\n error.response.status === 400 &&\n error.response.data?.code === 400201 &&\n error.response.data?.message === '\"User\" not found.'\n ) {\n error.response.status = 200;\n error.response.data = { is_muted: false, description: '', start_at: 0, end_at: 0, remaining_duration: 0 };\n return error.response;\n }\n }\n throw error;\n });\n};\n","import { createAction } from '@reduxjs/toolkit';\nimport axios from 'axios';\n\nimport createAsyncThunk from '@/redux/createAsyncThunk';\nimport { sendAdminMessageWithModeratorInfo } from '@chat/api/channelModeration';\nimport { DialogsActions } from '@common/redux/actions/dialogs';\nimport { selectApplicationData } from '@core/redux/selectors/applicationState';\nimport { toast } from '@feather/components/notification';\nimport logException from '@utils/logException';\nimport { ALERT_ADMIN_MESSAGE_SENT } from '@utils/text';\nimport toastBadRequestWarning from '@utils/toastBadRequestWarning';\n\nexport const ModerationsActions = {\n sendAdminMessage: createAsyncThunk<\n void,\n Pick & {\n origin: 'channels' | 'moderation';\n }\n >('chat/moderation/sendAdminMessage', async (payload, { dispatch, getState, rejectWithValue }) => {\n const appId = selectApplicationData(getState()).app_id;\n\n try {\n dispatch(DialogsActions.setIsFetching(true));\n await sendAdminMessageWithModeratorInfo({ appId, ...payload });\n\n if (payload.origin && payload.origin === 'channels') {\n toast.success({ message: ALERT_ADMIN_MESSAGE_SENT });\n dispatch(DialogsActions.hideDialog());\n }\n } catch (error) {\n if (axios.isAxiosError(error)) {\n toastBadRequestWarning(error);\n return rejectWithValue(error || '');\n }\n\n logException(error);\n return rejectWithValue(error);\n } finally {\n dispatch(DialogsActions.setIsFetching(false));\n }\n }),\n\n resetOpenChannels: createAction('chat/moderation/resetOpenChannels'),\n resetOpenChannelsModerationData: createAction('chat/moderation/resetOpenChannelsModerationData'),\n\n resetGroupChannels: createAction('chat/moderation/resetGroupChannels'),\n resetGroupChannelsModerationData: createAction('chat/moderation/resetGroupChannelsModerationData'),\n};\n","export const CommonColors = {\n WHITE: '#ECECEC',\n BLACK: '#2E2E2E',\n GRADIENT: 'GRADIENT',\n};\n\nexport const LightThemeColors = {\n PRIMARY: '#742DDD',\n PURPLE: '#9840D0',\n RED: '#CD4525',\n ORANGE: '#F09359',\n YELLOW: '#F6C453',\n GREEN: '#459A71',\n BLUE: '#4C7DF7',\n};\n\nexport const DarkThemeColors = {\n PRIMARY: '#A29DF8',\n PURPLE: '#B166D6',\n RED: '#EA7470',\n ORANGE: '#F3AF62',\n YELLOW: '#F8D871',\n GREEN: '#60B58B',\n BLUE: '#81A1EC',\n};\n\nexport const onboardingStepPaths = {\n STEP_ONE_PATH: '1',\n STEP_TWO_PATH: '2',\n STEP_THREE_PATH: '3',\n};\n\nexport const STEPS = {\n STEP_ONE: 1,\n STEP_TWO: 2,\n STEP_THREE: 3,\n};\n\n// Users will be redirected to here⬇ when they sign up at sendbird.com\n// {origin}/application-id/ai-chatbots/onboarding/steps\nexport const FIRST_ONBOARDING_STEP_URL = `/onboarding/steps/${onboardingStepPaths.STEP_ONE_PATH}`;\nexport const FIRST_ONBOARDING_STEP_FULL_URL = `/application-id/ai-chatbots/onboarding/steps/${onboardingStepPaths.STEP_ONE_PATH}`;\n","export const onboardingStepPaths = {\n STEP_ONE_PATH: '1',\n STEP_TWO_PATH: '2',\n STEP_THREE_PATH: '3',\n};\n\n// Users will be redirected to here⬇ when they sign up at sendbird.com\n// {origin}/application-id/ai-chatbots/onboarding/steps\nexport const V2_FIRST_ONBOARDING_STEP_URL = '/ai-chatbots/onboarding/v2/steps';\nexport const V2_FIRST_ONBOARDING_STEP_FULL_URL = `/ai-chatbots/onboarding/v2/steps/${onboardingStepPaths.STEP_ONE_PATH}`;\n","import uniq from 'lodash/uniq';\n\nimport { axios, getGateURL } from '@api/shared';\n\nexport type SignInData = {\n token: string;\n two_factor_registration_required?: boolean;\n two_factor_authentication_required?: boolean;\n account_locked: boolean;\n} & AccessControlSecurityOptions;\n\nexport const signIn = ({ email, password }: { email: string; password: string }) => {\n return axios.post(`${getGateURL()}/dashboard/auth/authenticate/`, {\n email,\n password,\n });\n};\n\nexport const signOut = () => {\n return axios.post(`${getGateURL()}/dashboard_api/profiles/sign_out/`, {});\n};\n\nexport const samlSigninInitiate = (payload: { slug_name: string }) => {\n return axios.post(`${getGateURL()}/dashboard_api/authentications/sso_saml/`, payload);\n};\n\nexport const resendActivationMail = (payload: { email: string }) => {\n return axios.post(`${getGateURL()}/dashboard_api/authentications/resend_activation_mail/`, payload);\n};\n\nexport const activateAccount: ActivateAccountAPI = (payload) => {\n return axios.get(`${getGateURL()}/dashboard_api/authentications/activate_user/`, {\n params: payload,\n });\n};\n\nexport const signUp = (payload) => {\n return axios.post(`${getGateURL()}/dashboard/auth/signup/`, payload);\n};\n\nexport const verifyAuth: VerifyAuthAPI = () => {\n return (\n axios\n .get(`${getGateURL()}/dashboard/auth/verify2/`)\n // TODO(MOD-6): Remove this replacement after backend migration\n .then((response) => {\n const permissions = [...response.data.role.permissions].map((permission) =>\n permission.replace(/^chat\\.channels\\./, 'moderation.'),\n );\n response.data.role.permissions = uniq(permissions);\n return response;\n })\n );\n};\n\nexport const getDeskToken = (appId: string) => {\n return axios.get<{ token: string }>(`${getGateURL()}/dashboard_api/authentications/get_desk_token`, {\n headers: { 'App-Id': appId },\n });\n};\n\nexport const verifyEmail = (payload: { token: string }) => {\n return axios.get(`${getGateURL()}/dashboard_api/profiles/verify_user_email/?token=${payload.token}`);\n};\n\nexport const sendEmailVerificationMail = () => {\n return axios.post(`${getGateURL()}/dashboard_api/profiles/resend_email_verification_mail/`, {});\n};\n\nexport const confirmEmailChange = (payload: { token: string; password: string }) => {\n return axios.post(`${getGateURL()}/dashboard_api/authentications/confirm_user_email_change/`, payload);\n};\n\nexport const getEmailChange = (token: string) => {\n return axios.get(`${getGateURL()}/dashboard_api/authentications/get_user_email_change_request/?token=${token}`);\n};\n\nexport const resetPassword = (payload) => {\n return axios.post(`${getGateURL()}/dashboard/auth/reset_password/`, payload);\n};\n\nexport const forgotPassword = (email) => {\n return axios.post(`${getGateURL()}/dashboard/auth/forgot_password/`, {\n email,\n });\n};\n\nexport const fetchInvitation = (invite_hash: string) => {\n return axios.get>(`${getGateURL()}/dashboard/auth/invitation/${invite_hash}/`);\n};\n\nexport const oauthGoogle = ({ idToken }) => {\n return axios.post(`${getGateURL()}/dashboard_api/authentications/oauth_google/`, {\n id_token: idToken,\n });\n};\n\nexport const verifyTwoFactor = (code) => {\n return axios.post(`${getGateURL()}/dashboard_api/two_factor_authentications/verify/`, {\n code,\n });\n};\n\nexport const recoverTwoFactor = (code: string) => {\n return axios.post(`${getGateURL()}/dashboard_api/two_factor_authentications/recover/`, {\n code,\n });\n};\n\nexport const resetTwoFactorAuth = (twoFactorAuthId: number) => {\n return axios.delete(`${getGateURL()}/dashboard_api/two_factor_authentications/${twoFactorAuthId}`);\n};\n\nexport const proveGreenLantern = (payload: { eid: string; password: string; targetUserEmail: string }) => {\n return axios.post(\n `${getGateURL()}/dashboard_api/authentications/team_account_login/`,\n payload,\n {},\n );\n};\n\nexport const verifySSOCallbackToken = (token: string) => {\n return axios.post(`${getGateURL()}/dashboard/auth/set_token/`, { token });\n};\n","import { create } from 'zustand';\n\ninterface AeroAvailabilityStoreState {\n isAeroAvailable: boolean;\n}\n\ninterface AeroAvailabilityStoreActions {\n setIsAeroAvailable: (isAeroAvailable: AeroAvailabilityStoreState['isAeroAvailable']) => void;\n}\n\ntype AeroAvailabilityStore = AeroAvailabilityStoreState & AeroAvailabilityStoreActions;\n\nconst initialState: AeroAvailabilityStoreState = {\n isAeroAvailable: false,\n};\n\nexport const useAeroAvailabilityStore = create()((set) => ({\n ...initialState,\n setIsAeroAvailable: (isAeroAvailable) => set(() => ({ isAeroAvailable })),\n}));\n","import { useAeroAvailabilityStore } from '@aero/stores/AeroAvailability';\n\nexport const verifyIsAiAgentOrganization = (organizations: readonly Organization[]) => {\n const aiAgentDashboardType = organizations?.[0]?.ai_agent_dashboard_type;\n if (aiAgentDashboardType === 'AI_AGENT_ONLY' || aiAgentDashboardType === 'AI_AGENT_AND_CHAT') {\n // This org can use Aero (AI Agent)\n useAeroAvailabilityStore.getState().setIsAeroAvailable(true);\n }\n\n return aiAgentDashboardType;\n};\n","import { createAction } from '@reduxjs/toolkit';\nimport is from '@sindresorhus/is';\nimport axios from 'axios';\n\nimport { browserRouter } from '@/browserRouter';\nimport createAsyncThunk from '@/redux/createAsyncThunk';\nimport {\n FIRST_ONBOARDING_STEP_FULL_URL,\n FIRST_ONBOARDING_STEP_URL,\n} from '@chat/aibots/containers/Onboarding/constants';\nimport {\n V2_FIRST_ONBOARDING_STEP_FULL_URL,\n V2_FIRST_ONBOARDING_STEP_URL,\n} from '@chat/aibots/containers/OnboardingV2/constants';\nimport { oauthGoogle, verifyAuth } from '@common/api/authentication';\nimport { verifyIsAiAgentOrganization } from '@common/utils/verifyIsAiAgentOrganization';\nimport { PredefinedRoles } from '@constants';\nimport { toast } from '@feather/components/notification/toast';\nimport { LocalStorage } from '@utils';\nimport getErrorMessage from '@utils/getErrorMessage';\nimport logException from '@utils/logException';\nimport toastBadRequestWarning from '@utils/toastBadRequestWarning';\nimport { getCurrentPathWithQueryString } from '@utils/urlParams';\n\nconst orgCreationExceptionRoute = [\n '/application-id/ai-chatbots/onboarding',\n FIRST_ONBOARDING_STEP_URL,\n FIRST_ONBOARDING_STEP_FULL_URL,\n V2_FIRST_ONBOARDING_STEP_URL,\n V2_FIRST_ONBOARDING_STEP_FULL_URL,\n];\n\nconst shouldRedirectToOrgCreation = (organizations: readonly Organization[]) => {\n const shouldRedirect =\n orgCreationExceptionRoute.every((url) => !location.pathname.includes(url)) && is.emptyArray(organizations);\n return shouldRedirect;\n};\n\nexport const AuthenticationActions = {\n authFetchingSet: createAction('common/authentication/authFetchingSet'),\n authFetchingUnset: createAction('common/authentication/authFetchingUnset'),\n\n signedIn: createAction<{\n token?: string;\n two_factor_authentication_required?: boolean;\n /**\n * @warning This attr is for testing purpose only.\n */\n authenticated?: boolean;\n }>('common/authentication/signedIn'),\n\n accountActivated: createAction('common/authentication/accountActivated'),\n\n verifyAuthentication: createAsyncThunk(\n 'common/authentication/verifyAuthentication',\n async (payload, { dispatch, rejectWithValue }) => {\n try {\n const { data } = await verifyAuth();\n const aiAgentDashboardType = verifyIsAiAgentOrganization(data.organizations);\n\n if (\n aiAgentDashboardType === 'AI_AGENT_ONLY' ||\n (aiAgentDashboardType === 'AI_AGENT_AND_CHAT' && LocalStorage.get('productMode') === 'aiagent')\n ) {\n browserRouter.navigate('/ai-agent');\n return;\n }\n\n // Right after the user signed up, set his role Owner.\n const role: MemberRole =\n data.organizations.length === 0\n ? {\n id: 0,\n name: PredefinedRoles.OWNER,\n permissions: [\n 'organization.general.all',\n 'organization.applications.all',\n 'organization.members.all',\n 'organization.billing.all',\n 'organization.security.all',\n 'application.overview.view',\n 'moderation.openChannel.all',\n 'moderation.groupChannel.all',\n 'moderation.supergroupChannel.all',\n 'chat.announcements.all',\n 'chat.dataExport.all',\n 'chat.messageSearch.all',\n 'application.users.all',\n 'chat.analytics.view',\n 'application.settings.all',\n 'support.technical',\n ],\n is_predefined: true,\n description: '',\n is_application_access_control: false,\n application_access_controls: [],\n application_access_controls_details: [],\n pii_access: 'read_write',\n }\n : data.role;\n\n dispatch(AuthenticationActions.authenticated({ ...data, role }));\n\n if (shouldRedirectToOrgCreation(data.organizations)) {\n browserRouter.navigate(`/onboarding/organization?${payload?.next ? `next=${payload?.next}` : ''}`);\n return;\n }\n if (payload?.next) {\n browserRouter.navigate(payload.next);\n return;\n }\n } catch (error) {\n if (axios.isAxiosError(error)) {\n const { status, data } = error.response || {};\n if (status === 400 && data) {\n dispatch(AuthenticationActions.unauthenticated());\n toast.error({ message: (data as { message: string }).message });\n browserRouter.navigate(`/auth/signin?next=${getCurrentPathWithQueryString()}`);\n } else {\n toast.error({ message: getErrorMessage(error) });\n }\n return rejectWithValue(error);\n }\n\n logException(error);\n dispatch(AuthenticationActions.authenticationFailed(error));\n return rejectWithValue(error);\n }\n },\n ),\n\n verificationMailSent: createAction('common/authentication/verificationMailSent'),\n emailVerified: createAction('common/authentication/emailVerified'),\n\n authenticated: createAction('common/authentication/authenticated'),\n authenticationFailed: createAction('common/authentication/authenticationFailed'),\n unauthenticated: createAction('common/authentication/unauthenticated'),\n\n // social\n oauthGoogle: createAsyncThunk<\n void,\n {\n id_token: string;\n next?: string; // JSON string\n }\n >('common/authentication/oauthGoogle', async (payload, { dispatch, rejectWithValue }) => {\n const { id_token, next } = payload;\n\n try {\n const { data } = await oauthGoogle({ idToken: id_token });\n const { code } = data;\n\n switch (code) {\n case 'type.auth.google.user.not_exist': {\n browserRouter.navigate(`/auth/signup?sso_token=${data.token}&sso_type=google`, {\n state: {\n email: data.email,\n },\n });\n break;\n }\n\n case 'type.auth.google.success': {\n let to = '/';\n if (data.two_factor_registration_required) {\n dispatch(AuthenticationActions.signedIn(data));\n to = `/auth/two_factor_registration${payload.next === '' ? '' : `?next=${payload.next}`}`;\n } else if (data.two_factor_authentication_required) {\n dispatch(\n AuthenticationActions.signedIn({\n ...data,\n two_factor_authentication_required: true,\n }),\n );\n to = `/auth/two_factor${next ? `?next=${next}` : ''}`;\n } else if (next) {\n to = next;\n }\n browserRouter.navigate(to);\n break;\n }\n\n default: {\n break;\n }\n }\n } catch (error) {\n if (axios.isAxiosError(error)) {\n toastBadRequestWarning(error);\n browserRouter.navigate('/auth/signin');\n return rejectWithValue(error);\n }\n\n logException(error);\n return rejectWithValue(error);\n }\n }),\n\n twoFactorAuthenticationSet: createAction<{ two_factor_authentication: boolean }>(\n 'common/authentication/twoFactorAuthenticationSet',\n ),\n};\n","import type { CancellableAxiosPromise } from '@api/cancellableAxios';\nimport { axios, getDashboardAPIUrl, getGateURL } from '@api/shared';\nimport { createFreeVoucher } from '@calls/api';\nimport { fetchVouchers } from '@common/api/billing';\n\ntype Stats = {\n monthly: {\n current: number;\n previous: number;\n };\n daily: {\n current: number;\n previous: number;\n };\n concurrent: number;\n peak: number;\n};\n\ntype FetchCallsUsageResponse = {\n participants: Stats;\n room_participants: Stats;\n live_participants: Stats;\n};\n\ntype FetchCallsUsageAPI = (appId: string) => CancellableAxiosPromise;\n\nexport const fetchMAU = ({ appId, payload: { startDate, endDate } }) => {\n return axios.get(`${getGateURL()}/platform/dapi/metrics/mau/?date_start=${startDate}&date_end=${endDate}`, {\n headers: {\n 'App-Id': appId,\n },\n });\n};\n\nexport const fetchMonthlyCCU = ({ appId, payload: { start_year, end_year, start_month, end_month } }) => {\n return axios.get(\n `${getGateURL()}/platform/v3/applications/peak_connections?time_dimension=monthly&start_year=${start_year}&end_year=${end_year}&start_month=${start_month}&end_month=${end_month}`,\n {\n headers: {\n 'App-Id': appId,\n },\n },\n );\n};\n\nexport const fetchDAU = ({ appId, payload: { startDate, endDate } }) => {\n return axios.get(`${getGateURL()}/platform/dapi/metrics/dau/?date_start=${startDate}&date_end=${endDate}`, {\n headers: {\n 'App-Id': appId,\n },\n });\n};\n\nexport const fetchMessagesCount = ({ appId, payload: { startDate, endDate } }) => {\n return axios.get(\n `${getGateURL()}/platform/dapi/metrics/messages/daily_count?start_date=${startDate}&end_date=${endDate}`,\n {\n headers: {\n 'App-Id': appId,\n },\n },\n );\n};\n\nexport const fetchDailyCCU = ({\n appId,\n payload: { start_year, end_year, start_month, end_month, start_day, end_day },\n}) => {\n return axios.get(\n `${getGateURL()}/platform/v3/applications/peak_connections?time_dimension=daily&start_year=${start_year}&end_year=${end_year}&start_month=${start_month}&end_month=${end_month}&start_day=${start_day}&end_day=${end_day}`,\n {\n headers: {\n 'App-Id': appId,\n },\n },\n );\n};\n\nexport const fetchDailyPCC = ({ appId, payload }) => {\n return axios.get(`${getGateURL()}/platform/v3/applications/peak_connections`, {\n params: {\n ...payload,\n time_dimension: 'daily',\n show_sdk: true,\n },\n headers: {\n 'App-Id': appId,\n },\n });\n};\n\nexport const fetchHourlyCCU = ({ appId, date }) => {\n return axios.get(`${getGateURL()}/platform/dapi/metrics/ccu_hourly`, {\n params: {\n date,\n },\n headers: {\n 'App-Id': appId,\n },\n });\n};\n\nexport const fetchMessagingUsage = (app_id) => {\n return axios.get(`${getGateURL()}/platform/dapi/metrics/usage/`, {\n headers: {\n 'App-Id': app_id,\n },\n });\n};\n\nexport const fetchCallsUsage: FetchCallsUsageAPI = (appId) => {\n return axios.get(`${getGateURL()}/dashboard_api/v2oip/stat`, {\n headers: {\n 'App-Id': appId,\n },\n });\n};\n\nexport const getAPIToken = ({ appId, password }) => {\n return axios.post(\n `${getGateURL()}/dashboard_api/applications/${appId}/get_api_token/`,\n { password },\n {\n headers: {\n 'App-Id': appId,\n },\n },\n );\n};\n\nexport const checkDNSResolveStatus = ({ appId }) => {\n return axios.get(`${getDashboardAPIUrl()}/api/dns_resolver/${appId}`);\n};\n\nexport const registerCallsApplication = async ({\n app_id,\n region,\n organization_uid,\n}: {\n app_id: Application['app_id'];\n region: RegionKey;\n organization_uid: string;\n}) => {\n // Register App\n await axios.post(\n `${getGateURL()}/dashboard_api/v2oip/applications/${app_id}/register`,\n { organization_uid, sendbird_region: region },\n {\n headers: {\n 'App-Id': app_id,\n },\n },\n );\n\n // Check if voucher claimed\n const { data } = await fetchVouchers({ limit: 1 });\n const shouldIssueFreeVoucher = data.count === 0;\n\n // Claim Vouchder\n if (shouldIssueFreeVoucher) {\n await createFreeVoucher(app_id);\n return { isFreeVoucherIssued: true };\n }\n return { isFreeVoucherIssued: false };\n};\n\nexport const setCoachmarkComplete = (): CancellableAxiosPromise => {\n return axios.put(`${getGateURL()}/dashboard_api/profiles/set_coachmark_complete/`, {});\n};\n\nexport const registerDeskApplication = ({ app_id }: { app_id: string }) =>\n axios.put(\n `${getGateURL()}/dashboard_api/applications/${app_id}/switch_desk`,\n { is_desk_enabled: true },\n {\n headers: {\n 'App-Id': app_id,\n },\n },\n );\n","import type { AxiosPromise } from 'axios';\n\nimport type { CancellableAxiosPromise } from '@api/cancellableAxios';\nimport { axios, getGateURL } from '@api/shared';\nimport { CDN_ASSETS_PREFIX } from '@constants';\nimport { fixedEncodeURIComponent } from '@utils';\n\nexport const changeAppName: ChangeAppNameAPI = ({ appId, appName }) => {\n return axios.put(\n `${getGateURL()}/platform/dapi/settings/change_app_name/`,\n {\n app_name: appName,\n },\n {\n headers: {\n 'App-Id': appId,\n },\n },\n );\n};\n\nexport const togglePushEnabled = ({ appId, push_enabled }) => {\n return axios.put(\n `${getGateURL()}/platform/dapi/applications/detail/`,\n {\n push_enabled,\n },\n {\n headers: {\n 'App-Id': appId,\n },\n },\n );\n};\n\nexport const fetchPushConfiguration = ({\n appId,\n pushTypePath,\n}: {\n appId: string;\n pushTypePath: T;\n}) => {\n return axios.get<{\n push_configurations: PushConfiguration[];\n }>(`${getGateURL()}/platform/v3/applications/push/${pushTypePath}`, {\n headers: {\n 'App-Id': appId,\n },\n });\n};\n\nexport const createPushConfiguration = ({\n appId,\n pushTypePath,\n payload,\n}: {\n appId: string;\n pushTypePath: T;\n payload: CreatePushConfigurationPayload;\n}) => {\n return axios.post<{\n push_configurations: PushConfiguration[];\n }>(`${getGateURL()}/platform/v3/applications/push/${pushTypePath}`, payload, {\n headers: {\n 'App-Id': appId,\n },\n });\n};\n\nexport const updatePushConfiguration = ({\n appId,\n pushConfigurationId,\n pushTypePath,\n payload,\n}: {\n appId: string;\n pushConfigurationId: string;\n pushTypePath: T;\n payload: UpdatePushConfigurationPayload;\n}) => {\n return axios.put<{ push_configurations: string }>(\n `${getGateURL()}/platform/v3/applications/push/${pushTypePath}/${pushConfigurationId}`,\n payload,\n {\n headers: {\n 'App-Id': appId,\n },\n },\n );\n};\n\nexport const deletePushConfiguration = ({\n appId,\n pushTypePath,\n pushConfigurationId,\n}: {\n appId: string;\n pushTypePath: PushTypePath;\n pushConfigurationId: string;\n}) => {\n return axios.delete(`${getGateURL()}/platform/v3/applications/push/${pushTypePath}/${pushConfigurationId}`, {\n headers: {\n 'App-Id': appId,\n },\n });\n};\n\nexport const fetchPushMessageTemplates = ({ appId }) => {\n return axios.get(`${getGateURL()}/platform/v3/applications/push/message_templates`, {\n headers: {\n 'App-Id': appId,\n },\n });\n};\n\nexport const updatePushMessageTemplates = ({ appId, templateName, payload }) => {\n return axios.post(`${getGateURL()}/platform/v3/applications/push/message_templates/${templateName}`, payload, {\n headers: {\n 'App-Id': appId,\n },\n });\n};\n\nexport const updatePushSettings: UpdatePushSettingsAPI = ({ appId, update }) => {\n return axios.put(`${getGateURL()}/platform/v3/applications/push/settings`, update, {\n headers: {\n 'App-Id': appId,\n },\n });\n};\n\nexport const getWebhooksAllCategories = ({ appId }: { appId: string }) => {\n return axios.get(`${getGateURL()}/platform/v3/applications/settings/webhook`, {\n headers: {\n 'App-Id': appId,\n },\n params: {\n display_all_webhook_categories: true,\n },\n });\n};\n\ntype GetWebhooksInformationResponse = {\n webhook: {\n enabled: boolean;\n url: string;\n include_members: boolean;\n enabled_events: WebhookEvents[];\n include_unread_count: boolean;\n events_to_include_channel_metadata: WebhookEvents[];\n };\n};\n\nexport const getWebhooksInformation = ({\n appId,\n}: {\n appId: string;\n}): CancellableAxiosPromise => {\n return axios.get(`${getGateURL()}/platform/v3/applications/settings/webhook`, {\n headers: {\n 'App-Id': appId,\n },\n });\n};\n\nexport const updateWebhookInformation: UpdateWebhookInformationAPI = ({\n appId,\n enabled,\n enabled_events,\n url,\n include_members,\n include_unread_count,\n events_to_include_channel_metadata,\n}) => {\n return axios.put(\n `${getGateURL()}/platform/v3/applications/settings/webhook`,\n {\n enabled,\n url,\n enabled_events,\n include_members,\n include_unread_count,\n events_to_include_channel_metadata,\n },\n {\n headers: {\n 'App-Id': appId,\n },\n },\n );\n};\n\nexport const updateMaxLengthMessage = ({ appId, max_length_message }) => {\n return axios.put(\n `${getGateURL()}/platform/dapi/settings/max_length_message/`,\n {\n max_length_message,\n },\n {\n headers: {\n 'App-Id': appId,\n },\n },\n );\n};\n\nexport const updateIgnoreMessageOffset = ({ appId, ignore_message_offset }) => {\n return axios.put(\n `${getGateURL()}/platform/dapi/settings/ignore_message_offset/`,\n {\n ignore_message_offset,\n },\n {\n headers: {\n 'App-Id': appId,\n },\n },\n );\n};\n\nexport const updateAutoEventMessage = ({ appId, auto_event_message }) => {\n return axios.put(\n `${getGateURL()}/platform/dapi/settings/auto_event_message/`,\n {\n auto_event_message,\n },\n {\n headers: {\n 'App-Id': appId,\n },\n },\n );\n};\n\nexport const fetchDefaultChannelInvitationPreference: FetchDefaultChannelInvitationPreferenceAPI = ({ appId }) => {\n return axios.get(`${getGateURL()}/platform/v3/applications/default_channel_invitation_preference`, {\n headers: {\n 'App-Id': appId,\n },\n });\n};\n\nexport const updateDefaultChannelInvitationPreference: UpdateDefaultChannelInvitationPreferenceAPI = ({\n appId,\n auto_accept,\n}) => {\n return axios.put(\n `${getGateURL()}/platform/v3/applications/default_channel_invitation_preference`,\n {\n auto_accept,\n },\n {\n headers: {\n 'App-Id': appId,\n },\n },\n );\n};\n\nexport const fetchDefaultProfanity = (): AxiosPromise<{ en: string; ko: string }> => {\n return axios.get(`${CDN_ASSETS_PREFIX}/data/profanity_filters.json`, {\n withCredentials: false,\n });\n};\n\nexport const updateAccessTokenUserPolicy = ({ appId, guest_user_policy }) => {\n return axios.put(\n `${getGateURL()}/platform/dapi/settings/access_token_user_policy/`,\n {\n guest_user_policy,\n },\n {\n headers: {\n 'App-Id': appId,\n },\n },\n );\n};\n\nexport const addCredentialsFilter = ({ appId, credentials_key }) => {\n return axios.post(\n `${getGateURL()}/platform/dapi/settings/credentials_filter/`,\n {\n credentials_key,\n },\n {\n headers: {\n 'App-Id': appId,\n },\n },\n );\n};\n\nexport const removeCredentialsFilter = ({ appId, id }) => {\n return axios.delete(`${getGateURL()}/platform/dapi/settings/credentials_filter/${id}/`, {\n headers: {\n 'App-Id': appId,\n },\n });\n};\n\nexport const deleteApplication = ({ appId }) => {\n return axios.delete(`${getGateURL()}/platform/v3/applications`, {\n headers: {\n 'App-Id': appId,\n },\n });\n};\n\nexport const updateModerationInfoADMM = ({ appId, is_moderator_info_in_admin_message }) => {\n return axios.put(\n `${getGateURL()}/dashboard/application/${appId}/`,\n {\n is_moderator_info_in_admin_message,\n },\n {\n headers: {\n 'App-Id': appId,\n },\n },\n );\n};\n\nexport const fetchSettingsGlobal: FetchSettingsGlobalAPI = ({ appId }) => {\n return axios.get(`${getGateURL()}/platform/v3/applications/settings_global`, {\n headers: {\n 'App-Id': appId,\n },\n });\n};\n\nexport const updateSettingsGlobal: UpdateSettingsGlobalAPI = ({ appId, payload }) => {\n return axios.put(`${getGateURL()}/platform/v3/applications/settings_global`, payload, {\n headers: {\n 'App-Id': appId,\n },\n });\n};\n\nexport const fetchSettingsForCustomChannelTypes: FetchSettingsForCustomChannelTypesAPI = ({ appId, limit, token }) => {\n return axios.get(`${getGateURL()}/platform/v3/applications/settings_by_channel_custom_type`, {\n headers: { 'App-Id': appId },\n params: { limit, token },\n });\n};\n\nexport const fetchSettingsForCustomChannelType: FetchSettingsForCustomChannelTypeAPI = ({ appId, custom_type }) => {\n return axios.get(\n `${getGateURL()}/platform/v3/applications/settings_by_channel_custom_type/${fixedEncodeURIComponent(custom_type)}`,\n {\n headers: { 'App-Id': appId },\n },\n );\n};\n\n/**\n * https://sendbird.com/docs/chat/platform-api/v3/channel/setting-up-channels/create-channel-settings-by-a-custom-channel-type\n */\nexport const createSettingsForCustomChannelType: CreateSettingsForCustomChannelTypeAPI = ({ appId, ...payload }) => {\n return axios.post(`${getGateURL()}/platform/v3/applications/settings_by_channel_custom_type`, payload, {\n headers: { 'App-Id': appId },\n });\n};\n\n/**\n * https://sendbird.com/docs/chat/platform-api/v3/channel/setting-up-channels/update-channel-settings-by-a-custom-channel-type\n */\nexport const updateSettingsForCustomChannelType: UpdateSettingsForCustomChannelTypeAPI = ({\n appId,\n custom_type,\n ...payload\n}) => {\n return axios.put(\n `${getGateURL()}/platform/v3/applications/settings_by_channel_custom_type/${fixedEncodeURIComponent(custom_type)}`,\n payload,\n {\n headers: { 'App-Id': appId },\n },\n );\n};\n\nexport const getIPWhitelist: GetIPWhitelistAPI = ({ appId }) => {\n return axios.get(`${getGateURL()}/platform/v3/applications/settings/ip_whitelist`, {\n headers: {\n 'App-Id': appId,\n },\n });\n};\n\nexport const putIPWhitelist: PutIPWhitelistAPI = ({ appId, ip_whitelist_addresses }) => {\n return axios.put(\n `${getGateURL()}/platform/v3/applications/settings/ip_whitelist`,\n { ip_whitelist_addresses },\n {\n headers: {\n 'App-Id': appId,\n },\n },\n );\n};\n\nexport const deleteIPWhitelist: DeleteIPWhitelistAPI = ({ appId, ip_whitelist_addresses }) => {\n return axios.delete(`${getGateURL()}/platform/v3/applications/settings/ip_whitelist`, {\n data: { ip_whitelist_addresses },\n headers: {\n 'App-Id': appId,\n },\n });\n};\n\nexport const updateOpenChannelDynamicPartitioningOption: UpdateOpenChannelDynamicPartitioningOptionAPI = ({\n appId,\n option_type,\n}) => {\n return axios.put(\n `${getGateURL()}/platform/dapi/settings/open_channels_dynamic_partitioning/`,\n { option_type },\n { headers: { 'App-Id': appId } },\n );\n};\n\nexport const fetchAccessControlList: FetchAccessControlListAPI = ({ appId }) =>\n axios.get(`${getGateURL()}/platform/dapi/settings/acls_from_sdk/`, {\n headers: { 'App-Id': appId },\n });\n\nexport const updateAccessControlList: UpdateAccessControlListAPI = ({ appId, payload }) =>\n axios.put(`${getGateURL()}/platform/dapi/settings/acls_from_sdk/`, { ...payload }, { headers: { 'App-Id': appId } });\n","import { createAction } from '@reduxjs/toolkit';\nimport axios from 'axios';\n\nimport { browserRouter } from '@/browserRouter';\nimport createAsyncThunk from '@/redux/createAsyncThunk';\nimport { setGateRegionSubdomain } from '@api/shared';\nimport { DialogsActions } from '@common/redux/actions/dialogs';\nimport { getApplication } from '@core/api/application';\nimport { getAPIToken } from '@core/api/overview';\nimport { changeAppName } from '@core/api/settings';\nimport { selectApplicationData } from '@core/redux/selectors/applicationState';\nimport { toast } from '@feather/components/notification';\nimport getErrorMessage from '@utils/getErrorMessage';\nimport logException from '@utils/logException';\nimport { ALERT_APPLICATION_NAME_CHANGED } from '@utils/text';\nimport toastBadRequestWarning from '@utils/toastBadRequestWarning';\n\nexport const ApplicationActions = {\n applicationSet: createAction('core/application/applicationSet'),\n applicationReset: createAction('core/application/applicationReset'),\n applicationCreated: createAction('core/application/applicationCreated'),\n applicationUpdated: createAction>('core/application/applicationUpdated'),\n applicationAttributesUpdated: createAction>(\n 'core/application/applicationAttributesUpdated',\n ),\n\n applicationFetched: createAction('core/application/applicationFetched'),\n fetchApplication: createAsyncThunk(\n 'core/application/fetchApplication',\n async (payload, { dispatch, rejectWithValue }) => {\n try {\n const { data } = await getApplication({ app_id: payload.app_id });\n\n setGateRegionSubdomain(data.region);\n dispatch(ApplicationActions.applicationFetched(data));\n } catch (error) {\n if (!axios.isAxiosError(error)) {\n logException(error);\n }\n const message = getErrorMessage(error);\n toast.error({ message });\n browserRouter.navigate('/');\n return rejectWithValue(message);\n }\n },\n ),\n\n changeAppName: createAsyncThunk<{ app_id: string; app_name: string }, { app_id: string; app_name: string }>(\n 'core/application/changeAppName',\n async (payload, { dispatch, rejectWithValue }) => {\n const { app_id, app_name } = payload;\n if (app_name.length === 0) {\n const error = new Error(window.intl.formatMessage({ id: 'core.settings.general.app.error_required' }));\n toastBadRequestWarning(error);\n return rejectWithValue(error);\n }\n if (app_name.length > 128) {\n const error = new Error(window.intl.formatMessage({ id: 'core.settings.general.app.error_limit' }));\n toastBadRequestWarning(error);\n return rejectWithValue(error);\n }\n\n try {\n dispatch(DialogsActions.setIsFetching(true));\n const { data } = await changeAppName({ appId: app_id, appName: app_name });\n\n toast.success({ message: ALERT_APPLICATION_NAME_CHANGED });\n dispatch(DialogsActions.hideDialog());\n return { app_id, app_name: data.app_name };\n } catch (error) {\n if (axios.isAxiosError(error)) {\n toastBadRequestWarning(error);\n return rejectWithValue(error);\n }\n\n logException(error);\n return rejectWithValue(error);\n } finally {\n dispatch(DialogsActions.setIsFetching(false));\n }\n },\n ),\n\n getAPIToken: createAsyncThunk(\n 'core/application/getAPIToken',\n async (payload, { dispatch, getState, rejectWithValue }) => {\n const appId = selectApplicationData(getState()).app_id;\n\n try {\n const { data } = await getAPIToken({ appId, password: payload.password });\n\n dispatch(DialogsActions.hideDialog());\n return data.api_token;\n } catch (error) {\n if (axios.isAxiosError(error)) {\n toastBadRequestWarning(error);\n return rejectWithValue(error);\n }\n\n logException(error);\n return rejectWithValue(error);\n }\n },\n ),\n};\n","import { createReducer } from '@reduxjs/toolkit';\n\nimport { ChannelsActions } from '@chat/redux/actions/channels';\nimport { ModerationsActions } from '@chat/redux/actions/moderations';\nimport { AuthenticationActions } from '@common/redux/actions/authentication';\nimport { GroupChannelSearchOperator } from '@constants';\nimport { ApplicationActions } from '@core/redux/actions/application';\n\ninterface GroupChannelsState {\n channels: readonly SendbirdChatChannel.GroupChannel[];\n next: string;\n\n current: SendbirdChatChannel.GroupChannel | null;\n\n isFetching: boolean;\n isFetchingLoadMore: boolean;\n\n // moderation\n isFetchingChannel: boolean;\n\n search: {\n option: GroupChannelSearchOperator;\n query: string;\n isSearching: boolean;\n isSuccess: boolean;\n };\n showEmptyChannels: boolean;\n order?: FetchGroupChannelsAPIPayloadBase['order'];\n}\n\nconst initialState: GroupChannelsState = {\n channels: [],\n next: '',\n\n current: null,\n\n isFetching: true,\n\n isFetchingChannel: true,\n isFetchingLoadMore: false,\n\n search: {\n option: GroupChannelSearchOperator.nicknameEquals,\n query: '',\n isSearching: false,\n isSuccess: false,\n },\n showEmptyChannels: true,\n};\n\nexport const groupChannelsReducer = createReducer(initialState, (builder) => {\n // ChannelsActions\n builder\n .addCase(ChannelsActions.fetchGroupChannels.pending, (state, { meta }) => {\n if (meta.arg.init) {\n state.isFetching = true;\n } else {\n state.isFetchingLoadMore = true;\n }\n })\n .addCase(ChannelsActions.fetchGroupChannels.fulfilled, (state, { payload }) => {\n state.channels = payload.init ? payload.channels : state.channels.concat(payload.channels);\n state.next = payload.next;\n state.isFetching = false;\n state.isFetchingLoadMore = false;\n })\n .addCase(ChannelsActions.fetchGroupChannels.rejected, (state) => {\n state.isFetching = false;\n state.isFetchingLoadMore = false;\n })\n .addCase(ChannelsActions.searchGroupChannels.pending, (state, { meta }) => {\n state.isFetching = true;\n state.search.query = meta.arg.query;\n state.search.option = meta.arg.option;\n state.search.isSearching = true;\n state.search.isSuccess = false;\n })\n .addCase(ChannelsActions.searchGroupChannels.fulfilled, (state, { payload }) => {\n state.channels = payload.init ? payload.channels : state.channels.concat(payload.channels);\n state.next = payload.next;\n state.isFetching = false;\n state.isFetchingLoadMore = false;\n state.search.query = payload.query;\n state.search.isSearching = false;\n state.search.isSuccess = true;\n })\n .addCase(ChannelsActions.searchGroupChannels.rejected, (state) => {\n state.isFetching = false;\n state.isFetchingLoadMore = false;\n state.search.isSearching = false;\n })\n .addCase(ChannelsActions.fetchGroupChannel.pending, (state) => {\n state.isFetchingChannel = true;\n })\n .addCase(ChannelsActions.setCurrentGroupChannel, (state, { payload }) => {\n state.isFetchingChannel = false;\n if (state.channels.some((channel) => channel.channel_url === payload.channel_url)) {\n state.channels = state.channels.map((channel) =>\n channel.channel_url === payload.channel_url ? payload : channel,\n );\n }\n state.current = payload;\n })\n .addCase(ChannelsActions.updateGroupChannelInList, (state, { payload }) => {\n state.channels = state.channels.map((channel) =>\n payload && channel.channel_url === payload.channel_url ? payload : channel,\n );\n })\n .addCase(ChannelsActions.deleteGroupChannelInList, (state, { payload }) => {\n state.channels = state.channels.filter((channel) =>\n payload.every((deleteTargetChannel) => channel.channel_url !== deleteTargetChannel.channel_url),\n );\n })\n .addCase(ChannelsActions.setGroupChannelSearchOption, (state, { payload }) => {\n state.search.option = payload;\n })\n .addCase(ChannelsActions.setGroupChannelSearchQuery, (state, { payload }) => {\n state.search.query = payload;\n })\n .addCase(ChannelsActions.setGroupChannelSearchState, (state, { payload }) => {\n state.search.isSearching = payload;\n })\n .addCase(ChannelsActions.setGroupChannelSearchSuccess, (state, { payload }) => {\n state.search.isSearching = false;\n state.search.isSuccess = payload;\n })\n .addCase(ChannelsActions.setGroupChannelShowEmptyChannels, (state, { payload }) => {\n state.showEmptyChannels = payload;\n })\n .addCase(ChannelsActions.setGroupChannelsSortOrder, (state, { payload }) => {\n state.order = payload;\n });\n\n // ModerationsActions\n builder\n .addCase(ModerationsActions.resetGroupChannels, () => initialState)\n .addCase(ModerationsActions.resetGroupChannelsModerationData, (state) => {\n state.current = null;\n });\n\n // Other actions\n builder\n .addCase(ApplicationActions.applicationReset, () => initialState)\n .addCase(AuthenticationActions.unauthenticated, () => initialState);\n});\n","import { createReducer } from '@reduxjs/toolkit';\n\nimport { ChannelsActions } from '@chat/redux/actions/channels';\nimport { ModerationsActions } from '@chat/redux/actions/moderations';\nimport { AuthenticationActions } from '@common/redux/actions/authentication';\nimport { OpenChannelSearchOperator } from '@constants';\n\ninterface OpenChannelsModerationState {\n isFetchingChannel: boolean; // fetch one channel for current\n current: SendbirdChatChannel.OpenChannel | null;\n}\n\ninterface OpenChannelsState extends OpenChannelsModerationState {\n channels: readonly SendbirdChatChannel.OpenChannel[];\n next: string;\n\n isFetching: boolean;\n isFetchingLoadMore: boolean;\n\n search: {\n option: OpenChannelSearchOperator;\n query: string;\n isSearching: boolean;\n isSuccess: boolean;\n };\n}\n\nconst initialModerationState: OpenChannelsModerationState = {\n isFetchingChannel: true,\n current: null,\n};\n\nconst initialState: OpenChannelsState = {\n channels: [],\n next: '',\n\n isFetching: true,\n isFetchingLoadMore: false,\n\n search: {\n option: OpenChannelSearchOperator.nameContains,\n query: '',\n isSearching: false,\n isSuccess: false,\n },\n\n // moderation\n ...initialModerationState,\n};\n\nexport const openChannelsReducer = createReducer(initialState, (builder) => {\n // ChannelsActions\n builder\n .addCase(ChannelsActions.fetchOpenChannels.pending, (state, { meta }) => {\n if (meta.arg.init) {\n state.isFetching = true;\n } else {\n state.isFetchingLoadMore = true;\n }\n })\n .addCase(ChannelsActions.fetchOpenChannels.fulfilled, (state, { payload }) => {\n state.channels = payload.init ? payload.channels : state.channels.concat(payload.channels);\n state.next = payload.next;\n state.isFetching = false;\n state.isFetchingLoadMore = false;\n })\n .addCase(ChannelsActions.searchOpenChannels.pending, (state, { meta }) => {\n state.isFetching = true;\n state.search.query = meta.arg.query;\n state.search.option = meta.arg.option;\n state.search.isSearching = true;\n state.search.isSuccess = false;\n })\n .addCase(ChannelsActions.searchOpenChannels.fulfilled, (state, { payload }) => {\n state.channels = payload.init ? payload.channels : state.channels.concat(payload.channels);\n state.next = payload.next;\n state.isFetching = false;\n state.isFetchingLoadMore = false;\n state.search.query = payload.query;\n state.search.isSearching = false;\n state.search.isSuccess = true;\n })\n .addCase(ChannelsActions.setOpenChannelSearchOption, (state, { payload }) => {\n state.search.option = payload;\n })\n .addCase(ChannelsActions.setOpenChannelSearchQuery, (state, { payload }) => {\n state.search.query = payload;\n state.search.isSuccess = false;\n })\n .addCase(ChannelsActions.setOpenChannelSearchState, (state, { payload }) => {\n state.search.isSearching = payload;\n })\n .addCase(ChannelsActions.setOpenChannelSearchSuccess, (state, { payload }) => {\n state.search.isSearching = false;\n state.search.isSuccess = payload;\n })\n .addCase(ChannelsActions.setCurrentOpenChannel, (state, { payload }) => {\n state.isFetchingChannel = false;\n state.current = payload;\n })\n .addCase(ChannelsActions.updateOpenChannelInList, (state, { payload }) => {\n state.channels = state.channels.map((channel) => {\n if (payload && channel.channel_url === payload.channel_url) {\n return payload;\n }\n return channel;\n });\n })\n .addCase(ChannelsActions.deleteOpenChannelInList, (state, { payload }) => {\n state.channels = state.channels.filter((channel) =>\n payload.every((deleteTargetChannel) => channel.channel_url !== deleteTargetChannel.channel_url),\n );\n });\n\n // ModerationsActions\n builder\n .addCase(ModerationsActions.resetOpenChannels, () => initialState)\n .addCase(ModerationsActions.resetOpenChannelsModerationData, (state) => {\n return {\n ...state,\n ...initialModerationState,\n };\n });\n\n // Other actions\n builder.addCase(AuthenticationActions.unauthenticated, () => initialState);\n});\n","import { axios, getGateURL } from '@api/shared';\n\nexport const changePassword = (payload: { password: string; new_password: string; new_password_confirm: string }) => {\n return axios.put(`${getGateURL()}/dashboard/auth/change_password/`, payload);\n};\n\nexport const changeEmail: ChangeEmailAPI = (payload) => {\n return axios.post(`${getGateURL()}/dashboard_api/profiles/change_user_email/`, payload);\n};\n\nexport const updateProfile: UpdateProfileAPI = (id, payload) => {\n return axios.patch(`${getGateURL()}/dashboard_api/profiles/${id}/`, payload);\n};\n\nexport const isAbleToUnregister: IsAbleToUnregisterAPI = () => {\n return axios.get(`${getGateURL()}/dashboard/auth/is_able_to_unregister/`);\n};\n\nexport const unregister = (password: string = '') => {\n return axios.post(`${getGateURL()}/dashboard/auth/unregister/`, {\n password,\n });\n};\n\nexport const prepareTwoFactor = () => {\n return axios.post<{ provision_uri: string; secret_code: string }>(\n `${getGateURL()}/dashboard_api/two_factor_authentications/`,\n {},\n );\n};\n\nexport const registerTwoFactor = (payload: { code: string }) => {\n return axios.post<{ recovery_code: string; token: string }>(\n `${getGateURL()}/dashboard_api/two_factor_authentications/confirm/`,\n payload,\n );\n};\n\nexport const turnoffTwoFactor = () => {\n return axios.delete(`${getGateURL()}/dashboard_api/two_factor_authentications/`);\n};\n\nexport const activateLockedAccount = () => {\n return axios.put(`${getGateURL()}/dashboard/auth/activate_locked_account/`, {});\n};\n\nexport const linkAwsAccount = (payload: {\n company_name: string;\n company_email: string;\n aws_account_id: string;\n token: string;\n}) => {\n return axios.post<{\n token: string;\n company_name: string;\n company_email: string;\n aws_id: string;\n }>(`${getGateURL()}/aws_marketplace/users/`, payload);\n};\n","import { createAction } from '@reduxjs/toolkit';\nimport axios from 'axios';\n\nimport createAsyncThunk from '@/redux/createAsyncThunk';\nimport { changeEmail, isAbleToUnregister, turnoffTwoFactor, unregister } from '@common/api/account';\nimport { DialogType } from '@common/containers/dialogs/DialogType';\nimport logException from '@utils/logException';\nimport toastBadRequestWarning from '@utils/toastBadRequestWarning';\n\nimport { AuthenticationActions } from './authentication';\nimport { DialogsActions } from './dialogs';\n\nexport const AccountActions = {\n changeEmail: createAsyncThunk<{ newEmail: string }, { email: string; password: string }>(\n 'common/account/changeEmail',\n async (payload, { dispatch, rejectWithValue }) => {\n try {\n const { data } = await changeEmail({\n email: payload.email,\n password: payload.password,\n });\n\n dispatch(DialogsActions.hideDialog());\n return { newEmail: data.new_email };\n } catch (error) {\n toastBadRequestWarning(error);\n return rejectWithValue(error);\n }\n },\n ),\n passwordChanged: createAction<{ token: string; user: AuthUser }>('common/account/passwordChanged'),\n userUpdated: createAction('common/account/userUpdated'),\n\n checkUnregisterAvailability: createAsyncThunk(\n 'common/account/checkUnregisterAvailability',\n async (_, { dispatch, getState, rejectWithValue }) => {\n const organization = getState().organizations.current;\n\n try {\n const { data } = await isAbleToUnregister();\n\n const dialogProps = data.organizations.find((org) => org.uid === organization.uid);\n\n dispatch(createAction(AccountActions.unregister.fulfilled.type)());\n dispatch(DialogsActions.showDialog({ dialogTypes: DialogType.DeleteAccount, dialogProps }));\n } catch (error) {\n if (axios.isAxiosError(error)) {\n toastBadRequestWarning(error);\n return rejectWithValue(error);\n }\n\n logException(error);\n return rejectWithValue(error);\n }\n },\n ),\n\n unregister: createAsyncThunk(\n 'common/account/unregister',\n async (payload, { rejectWithValue }) => {\n try {\n await unregister(payload.password);\n } catch (error) {\n if (axios.isAxiosError(error)) {\n toastBadRequestWarning(error);\n return rejectWithValue(error);\n }\n\n logException(error);\n return rejectWithValue(error);\n }\n },\n ),\n\n turnOffGoogleAuthenticator: createAsyncThunk(\n 'common/account/turnoffGoogleAuthenticator',\n async (_, { dispatch, rejectWithValue }) => {\n try {\n await turnoffTwoFactor();\n\n dispatch(AuthenticationActions.twoFactorAuthenticationSet({ two_factor_authentication: false }));\n dispatch(DialogsActions.hideDialog());\n } catch (error) {\n if (axios.isAxiosError(error)) {\n toastBadRequestWarning(error);\n return rejectWithValue(error);\n }\n\n logException(error);\n return rejectWithValue(error);\n }\n },\n ),\n};\n","import { createReducer, isAnyOf } from '@reduxjs/toolkit';\n\nimport { AccountActions } from '@common/redux/actions/account';\n\ninterface AccountState {\n isFetching: boolean;\n isFetchingUnregister: boolean;\n}\n\nconst initialState: AccountState = {\n isFetching: false,\n isFetchingUnregister: false,\n};\n\nexport const accountReducer = createReducer(initialState, (builder) => {\n builder\n .addCase(AccountActions.passwordChanged, (state) => {\n state.isFetching = false;\n })\n .addCase(AccountActions.unregister.pending, (state) => {\n state.isFetchingUnregister = true;\n })\n .addMatcher(isAnyOf(AccountActions.unregister.fulfilled, AccountActions.unregister.rejected), (state) => {\n state.isFetchingUnregister = false;\n });\n});\n","import { createAction, createReducer, isAnyOf } from '@reduxjs/toolkit';\n\n/**\n * Actions below are re-defined here to avoid circular dependency issue.\n */\n/**\n * @see ApplicationActions.applicationCreated\n */\nconst applicationCreated = createAction('core/application/applicationCreated');\n/**\n * @see ApplicationActions.changeAppName.fulfilled\n */\nconst applicationAppNameChanged = createAction>(\n 'core/application/changeAppName/fulfilled',\n);\n/**\n * @see SettingsActions.applicationDeleted\n */\nconst applicationDeleted = createAction>('core/settings/applicationDeleted');\n\ntype ApplicationUpdateState =\n | ReturnType\n | ReturnType\n | ReturnType\n | null;\n\nconst initialState: ApplicationUpdateState = null;\n\nexport const applicationUpdateReducer = createReducer(initialState, (builder) => {\n builder.addMatcher(\n isAnyOf(applicationCreated, applicationAppNameChanged, applicationDeleted),\n (_, action) => action as ApplicationUpdateState,\n );\n});\n","import { createReducer, isAnyOf } from '@reduxjs/toolkit';\n\nimport { AccountActions } from '@common/redux/actions/account';\nimport { AuthenticationActions } from '@common/redux/actions/authentication';\n\nexport interface AuthenticationState {\n authenticated: boolean;\n user: AuthUser;\n role: MemberRole;\n isFetching: boolean;\n auto_pw?: boolean;\n is_social?: boolean;\n is_sso?: boolean;\n}\n\nconst initialState: AuthenticationState = {\n isFetching: false,\n authenticated: false,\n user: {\n country_code: '',\n email: '',\n new_email: '',\n email_verified: false,\n nickname: '',\n first_name: '',\n last_name: '',\n country_name: '',\n profile_id: 0,\n profile_url: '',\n user_id: 0,\n two_factor_authentication: false,\n verification_email_sent: false,\n coachmark_completed: false,\n join_date: '',\n account_locked: false,\n last_password_changed_at: '',\n is_onboarding_survey_done: false,\n },\n role: {\n name: 'GUEST',\n permissions: [],\n is_predefined: false,\n description: '',\n is_application_access_control: false,\n application_access_controls: [],\n application_access_controls_details: [],\n created_at: '',\n updated_at: '',\n id: 0,\n pii_access: 'none',\n },\n is_social: false,\n is_sso: false,\n};\n\nexport const authenticationReducer = createReducer(initialState, (builder) => {\n // AuthenticationActions\n builder\n .addCase(AuthenticationActions.authFetchingSet, (state) => {\n state.isFetching = true;\n })\n .addCase(AuthenticationActions.authFetchingUnset, (state) => {\n state.isFetching = false;\n })\n .addCase(AuthenticationActions.verifyAuthentication.pending, (state) => {\n state.isFetching = true;\n })\n .addCase(AuthenticationActions.authenticated, (state, { payload }) => {\n return {\n ...state,\n isFetching: false,\n authenticated: true,\n ...payload,\n };\n })\n .addCase(AuthenticationActions.signedIn, (state, { payload }) => {\n return {\n ...state,\n authenticated: !payload.two_factor_authentication_required,\n isFetching: false,\n ...payload,\n };\n })\n .addCase(AuthenticationActions.verificationMailSent, (state) => {\n state.user.verification_email_sent = true;\n })\n .addCase(AuthenticationActions.emailVerified, (state) => {\n state.user.email_verified = true;\n state.isFetching = false;\n })\n .addCase(AuthenticationActions.accountActivated, (state) => {\n state.user.account_locked = false;\n state.isFetching = false;\n })\n .addCase(AuthenticationActions.twoFactorAuthenticationSet, (state, { payload }) => {\n state.user.two_factor_authentication = payload.two_factor_authentication;\n })\n .addCase(AuthenticationActions.unauthenticated, () => initialState);\n\n // Other actions\n builder\n .addCase(AccountActions.changeEmail.fulfilled, (state, { payload }) => {\n state.user.new_email = payload.newEmail;\n })\n .addCase(AccountActions.passwordChanged, (state, { payload }) => {\n state.user = payload.user;\n })\n .addCase(AccountActions.userUpdated, (state, { payload }) => {\n state.user = payload;\n });\n\n // AuthenticationActions\n builder.addMatcher(\n isAnyOf(AuthenticationActions.verifyAuthentication.fulfilled, AuthenticationActions.authenticationFailed),\n (state) => {\n state.isFetching = false;\n },\n );\n});\n","import axios from 'axios';\n\nimport createAsyncThunk from '@/redux/createAsyncThunk';\nimport { fetchCardInfo } from '@common/api/billing';\nimport logException from '@utils/logException';\nimport toastBadRequestWarning from '@utils/toastBadRequestWarning';\n\nexport const BillingActions = {\n fetchCardInfo: createAsyncThunk(\n 'common/billing/fetchCardInfo',\n async (payload, { rejectWithValue }) => {\n try {\n const { data } = await fetchCardInfo({\n organization_uid: payload.organization_uid,\n });\n\n return data;\n } catch (error) {\n if (axios.isAxiosError(error)) {\n toastBadRequestWarning(error);\n return rejectWithValue(error);\n }\n\n logException(error);\n return rejectWithValue(error);\n }\n },\n ),\n};\n","import { createReducer } from '@reduxjs/toolkit';\n\nimport { AuthenticationActions } from '@common/redux/actions/authentication';\nimport { BillingActions } from '@common/redux/actions/billing';\n\ninterface BillingState {\n fetchingCardInfo: boolean;\n\n /**\n * null if it has never been fetched, {} (empty object) if there's no registered card\n */\n cardInfo: CreditCardInfo | {} | null;\n}\n\nconst initialState: BillingState = {\n fetchingCardInfo: false,\n cardInfo: null,\n};\n\nexport const billingReducer = createReducer(initialState, (builder) => {\n // BillingActions\n builder\n .addCase(BillingActions.fetchCardInfo.pending, (state) => {\n state.fetchingCardInfo = true;\n })\n .addCase(BillingActions.fetchCardInfo.fulfilled, (state, { payload }) => {\n state.cardInfo = payload;\n state.fetchingCardInfo = false;\n });\n\n // Other actions\n builder.addCase(AuthenticationActions.unauthenticated, () => initialState);\n});\n","import { createReducer } from '@reduxjs/toolkit';\n\nimport type { DialogType } from '@common/containers/dialogs/DialogType';\nimport { AuthenticationActions } from '@common/redux/actions/authentication';\nimport { DialogsActions } from '@common/redux/actions/dialogs';\n\ninterface DialogsState {\n dialogTypes: DialogType | '';\n dialogProps: ShowDialogPayload | {};\n isFetching: boolean;\n}\n\nconst initialState: DialogsState = {\n dialogTypes: '',\n dialogProps: {},\n isFetching: false,\n};\n\nexport const dialogsReducer = createReducer(initialState, (builder) => {\n // DialogsActions\n builder\n .addCase(DialogsActions.showDialog, (state, { payload }) => {\n state.dialogTypes = payload.dialogTypes;\n state.dialogProps = 'dialogProps' in payload ? payload.dialogProps : {};\n state.isFetching = false;\n })\n .addCase(DialogsActions.hideDialog, () => initialState)\n .addCase(DialogsActions.setIsFetching, (state, { payload }) => {\n state.isFetching = payload;\n });\n\n // Other actions\n builder.addCase(AuthenticationActions.unauthenticated, () => initialState);\n});\n","import { createReducer } from '@reduxjs/toolkit';\n\nimport { AuthenticationActions } from '@common/redux/actions/authentication';\nimport { ImagePreviewActions } from '@common/redux/actions/imagePreview';\n\ninterface ImagePreviewState {\n images: ImagePreview[];\n}\n\nconst initialState: ImagePreviewState = {\n images: [],\n};\n\nexport const imagePreviewReducer = createReducer(initialState, (builder) => {\n // ImagePreviewActions\n builder\n .addCase(ImagePreviewActions.showImagePreview, (state, { payload }) => {\n state.images = payload as unknown as ImagePreview[];\n })\n .addCase(ImagePreviewActions.hideImagePreview, () => initialState);\n\n // Other actions\n builder.addCase(AuthenticationActions.unauthenticated, () => initialState);\n});\n","import { createAction } from '@reduxjs/toolkit';\n\nimport type { LeftNavigationBarMenuItem } from '@feather';\n\nimport type { LNBState } from '../reducers/lnb';\n\nexport const LNBActions = {\n setLNBMenuItems: createAction<{ items: LNBState['menuItems'] }>('common/lnb/setLNBMenuItems'),\n\n setActiveLNBMenuItem: createAction<{\n activeItemKey?: LNBState['activeItemKey'];\n activeGroup?: LNBState['activeGroup'];\n }>('common/lnb/setActiveLNBMenuItem'),\n\n updateLNBMenuItem: createAction<{ key: string; option: Partial> }>(\n 'common/lnb/updateLNBMenuItem',\n ),\n};\n","import { createReducer } from '@reduxjs/toolkit';\n\nimport { LNBActions } from '@common/redux/actions/lnb';\nimport type { LeftNavigationBarItemInterface, LeftNavigationBarMenuItem } from '@feather';\n\nexport interface LNBState {\n menuItems: LeftNavigationBarMenuItem[];\n activeItemKey: string | undefined;\n activeGroup: string | undefined;\n}\n\nconst initialState: LNBState = {\n menuItems: [],\n activeItemKey: undefined,\n activeGroup: undefined,\n};\n\nexport const lnbReducer = createReducer(initialState, (builder) => {\n builder\n .addCase(LNBActions.setLNBMenuItems, (state, { payload }) => {\n state.menuItems = payload.items;\n })\n .addCase(LNBActions.setActiveLNBMenuItem, (state, { payload }) => {\n state.activeItemKey = payload.activeItemKey;\n state.activeGroup = payload.activeGroup;\n })\n .addCase(LNBActions.updateLNBMenuItem, (state, { payload }) => {\n state.menuItems = state.menuItems.map((item: LeftNavigationBarItemInterface) =>\n item.key === payload.key\n ? { ...item, ...payload.option }\n : {\n ...item,\n subMenus: item.subMenus?.map((subMenu) =>\n subMenu.key === payload.key ? { ...subMenu, ...payload.option } : subMenu,\n ),\n },\n );\n });\n});\n","// Cache implementation based on Erik Rasmussen's `lru-memoize`:\n// https://github.com/erikras/lru-memoize\nvar NOT_FOUND = 'NOT_FOUND';\n\nfunction createSingletonCache(equals) {\n var entry;\n return {\n get: function get(key) {\n if (entry && equals(entry.key, key)) {\n return entry.value;\n }\n\n return NOT_FOUND;\n },\n put: function put(key, value) {\n entry = {\n key: key,\n value: value\n };\n },\n getEntries: function getEntries() {\n return entry ? [entry] : [];\n },\n clear: function clear() {\n entry = undefined;\n }\n };\n}\n\nfunction createLruCache(maxSize, equals) {\n var entries = [];\n\n function get(key) {\n var cacheIndex = entries.findIndex(function (entry) {\n return equals(key, entry.key);\n }); // We found a cached entry\n\n if (cacheIndex > -1) {\n var entry = entries[cacheIndex]; // Cached entry not at top of cache, move it to the top\n\n if (cacheIndex > 0) {\n entries.splice(cacheIndex, 1);\n entries.unshift(entry);\n }\n\n return entry.value;\n } // No entry found in cache, return sentinel\n\n\n return NOT_FOUND;\n }\n\n function put(key, value) {\n if (get(key) === NOT_FOUND) {\n // TODO Is unshift slow?\n entries.unshift({\n key: key,\n value: value\n });\n\n if (entries.length > maxSize) {\n entries.pop();\n }\n }\n }\n\n function getEntries() {\n return entries;\n }\n\n function clear() {\n entries = [];\n }\n\n return {\n get: get,\n put: put,\n getEntries: getEntries,\n clear: clear\n };\n}\n\nexport var defaultEqualityCheck = function defaultEqualityCheck(a, b) {\n return a === b;\n};\nexport function createCacheKeyComparator(equalityCheck) {\n return function areArgumentsShallowlyEqual(prev, next) {\n if (prev === null || next === null || prev.length !== next.length) {\n return false;\n } // Do this in a for loop (and not a `forEach` or an `every`) so we can determine equality as fast as possible.\n\n\n var length = prev.length;\n\n for (var i = 0; i < length; i++) {\n if (!equalityCheck(prev[i], next[i])) {\n return false;\n }\n }\n\n return true;\n };\n}\n// defaultMemoize now supports a configurable cache size with LRU behavior,\n// and optional comparison of the result value with existing values\nexport function defaultMemoize(func, equalityCheckOrOptions) {\n var providedOptions = typeof equalityCheckOrOptions === 'object' ? equalityCheckOrOptions : {\n equalityCheck: equalityCheckOrOptions\n };\n var _providedOptions$equa = providedOptions.equalityCheck,\n equalityCheck = _providedOptions$equa === void 0 ? defaultEqualityCheck : _providedOptions$equa,\n _providedOptions$maxS = providedOptions.maxSize,\n maxSize = _providedOptions$maxS === void 0 ? 1 : _providedOptions$maxS,\n resultEqualityCheck = providedOptions.resultEqualityCheck;\n var comparator = createCacheKeyComparator(equalityCheck);\n var cache = maxSize === 1 ? createSingletonCache(comparator) : createLruCache(maxSize, comparator); // we reference arguments instead of spreading them for performance reasons\n\n function memoized() {\n var value = cache.get(arguments);\n\n if (value === NOT_FOUND) {\n // @ts-ignore\n value = func.apply(null, arguments);\n\n if (resultEqualityCheck) {\n var entries = cache.getEntries();\n var matchingEntry = entries.find(function (entry) {\n return resultEqualityCheck(entry.value, value);\n });\n\n if (matchingEntry) {\n value = matchingEntry.value;\n }\n }\n\n cache.put(arguments, value);\n }\n\n return value;\n }\n\n memoized.clearCache = function () {\n return cache.clear();\n };\n\n return memoized;\n}","import { defaultMemoize, defaultEqualityCheck } from './defaultMemoize';\nexport { defaultMemoize, defaultEqualityCheck };\n\nfunction getDependencies(funcs) {\n var dependencies = Array.isArray(funcs[0]) ? funcs[0] : funcs;\n\n if (!dependencies.every(function (dep) {\n return typeof dep === 'function';\n })) {\n var dependencyTypes = dependencies.map(function (dep) {\n return typeof dep === 'function' ? \"function \" + (dep.name || 'unnamed') + \"()\" : typeof dep;\n }).join(', ');\n throw new Error(\"createSelector expects all input-selectors to be functions, but received the following types: [\" + dependencyTypes + \"]\");\n }\n\n return dependencies;\n}\n\nexport function createSelectorCreator(memoize) {\n for (var _len = arguments.length, memoizeOptionsFromArgs = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n memoizeOptionsFromArgs[_key - 1] = arguments[_key];\n }\n\n var createSelector = function createSelector() {\n for (var _len2 = arguments.length, funcs = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n funcs[_key2] = arguments[_key2];\n }\n\n var _recomputations = 0;\n\n var _lastResult; // Due to the intricacies of rest params, we can't do an optional arg after `...funcs`.\n // So, start by declaring the default value here.\n // (And yes, the words 'memoize' and 'options' appear too many times in this next sequence.)\n\n\n var directlyPassedOptions = {\n memoizeOptions: undefined\n }; // Normally, the result func or \"output selector\" is the last arg\n\n var resultFunc = funcs.pop(); // If the result func is actually an _object_, assume it's our options object\n\n if (typeof resultFunc === 'object') {\n directlyPassedOptions = resultFunc; // and pop the real result func off\n\n resultFunc = funcs.pop();\n }\n\n if (typeof resultFunc !== 'function') {\n throw new Error(\"createSelector expects an output function after the inputs, but received: [\" + typeof resultFunc + \"]\");\n } // Determine which set of options we're using. Prefer options passed directly,\n // but fall back to options given to createSelectorCreator.\n\n\n var _directlyPassedOption = directlyPassedOptions,\n _directlyPassedOption2 = _directlyPassedOption.memoizeOptions,\n memoizeOptions = _directlyPassedOption2 === void 0 ? memoizeOptionsFromArgs : _directlyPassedOption2; // Simplifying assumption: it's unlikely that the first options arg of the provided memoizer\n // is an array. In most libs I've looked at, it's an equality function or options object.\n // Based on that, if `memoizeOptions` _is_ an array, we assume it's a full\n // user-provided array of options. Otherwise, it must be just the _first_ arg, and so\n // we wrap it in an array so we can apply it.\n\n var finalMemoizeOptions = Array.isArray(memoizeOptions) ? memoizeOptions : [memoizeOptions];\n var dependencies = getDependencies(funcs);\n var memoizedResultFunc = memoize.apply(void 0, [function recomputationWrapper() {\n _recomputations++; // apply arguments instead of spreading for performance.\n\n return resultFunc.apply(null, arguments);\n }].concat(finalMemoizeOptions)); // If a selector is called with the exact same arguments we don't need to traverse our dependencies again.\n\n var selector = memoize(function dependenciesChecker() {\n var params = [];\n var length = dependencies.length;\n\n for (var i = 0; i < length; i++) {\n // apply arguments instead of spreading and mutate a local list of params for performance.\n // @ts-ignore\n params.push(dependencies[i].apply(null, arguments));\n } // apply arguments instead of spreading for performance.\n\n\n _lastResult = memoizedResultFunc.apply(null, params);\n return _lastResult;\n });\n Object.assign(selector, {\n resultFunc: resultFunc,\n memoizedResultFunc: memoizedResultFunc,\n dependencies: dependencies,\n lastResult: function lastResult() {\n return _lastResult;\n },\n recomputations: function recomputations() {\n return _recomputations;\n },\n resetRecomputations: function resetRecomputations() {\n return _recomputations = 0;\n }\n });\n return selector;\n }; // @ts-ignore\n\n\n return createSelector;\n}\nexport var createSelector = /* #__PURE__ */createSelectorCreator(defaultMemoize);\n// Manual definition of state and output arguments\nexport var createStructuredSelector = function createStructuredSelector(selectors, selectorCreator) {\n if (selectorCreator === void 0) {\n selectorCreator = createSelector;\n }\n\n if (typeof selectors !== 'object') {\n throw new Error('createStructuredSelector expects first argument to be an object ' + (\"where each property is a selector, instead received a \" + typeof selectors));\n }\n\n var objectKeys = Object.keys(selectors);\n var resultSelector = selectorCreator( // @ts-ignore\n objectKeys.map(function (key) {\n return selectors[key];\n }), function () {\n for (var _len3 = arguments.length, values = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {\n values[_key3] = arguments[_key3];\n }\n\n return values.reduce(function (composition, value, index) {\n composition[objectKeys[index]] = value;\n return composition;\n }, {});\n });\n return resultSelector;\n};","import type { AxiosPromise } from 'axios';\nimport axiosModule from 'axios';\n\nimport setupAxiosInterceptors from '@api/setupAxiosInterceptors';\nimport { axios, getGateURL } from '@api/shared';\n\nconst gateAxios = axiosModule.create({ baseURL: getGateURL(), withCredentials: true });\nsetupAxiosInterceptors(gateAxios);\n\nexport const createOrganization: CreateOrganizationAPI = ({\n organizationName: organization_name,\n contact,\n shopify_signup_token,\n}) => {\n return axios.post(`${getGateURL()}/dashboard_api/organizations/`, {\n organization_name,\n contact,\n shopify_signup_token,\n });\n};\n\nexport const fetchOrganization: FetchOrganizationAPI = (organization_uid) => {\n return axios.get(`${getGateURL()}/dashboard_api/organizations/${organization_uid}/`);\n};\n\nexport const updateOrganization: UpdateOrganizationAPI = (organization_uid, payload) => {\n return axios.patch(`${getGateURL()}/dashboard_api/organizations/${organization_uid}/`, payload);\n};\n\nexport const fetchOrganizationMembers: FetchOrganizationMembersAPI = ({ uid, params }) => {\n return axios.get(`${getGateURL()}/dashboard_api/organizations/${uid}/members/`, {\n params,\n });\n};\n\nexport const updateOrganizationMemberRole: UpdateOrganizationMemberRoleAPI = ({ uid, ...payload }) => {\n return axios.put(`${getGateURL()}/dashboard/organization/${uid}/members/`, payload);\n};\n\nexport const deleteOrganizationMember = ({ uid, email }: { uid: string; email: string }) => {\n return axios.delete(`${getGateURL()}/dashboard/organization/${uid}/members/`, {\n data: {\n email,\n },\n });\n};\n\nexport const exportOrganizationMembersList = (organization_uid: string) => {\n return axios.get(`${getGateURL()}/dashboard/organization/${organization_uid}/export_member_list/`, {\n headers: {\n 'Content-Type': 'text/csv',\n },\n });\n};\n\nexport const inviteMember = (payload: { email: string; organization_uid: string; role: string }) => {\n return axios.post>(`${getGateURL()}/dashboard/organization/invitation/`, payload);\n};\n\nexport const fetchOrganizationInvitations: FetchOrganizationInvitationsAPI = ({ uid, params }) => {\n return axios.get(`${getGateURL()}/dashboard_api/organizations/${uid}/invitations/`, {\n params,\n });\n};\n\nexport const updateInvitation = (id: string) => {\n return axios.put>(`${getGateURL()}/dashboard/organization/invitation/${id}/`, {});\n};\n\nexport const cancelInvitation = (id: string) => {\n return axios.delete<{}>(`${getGateURL()}/dashboard/organization/invitation/${id}/`);\n};\n\nexport const setLoginIPRanges = ({\n loginIPRanges,\n ignore_cidr_on_two_factor_authentication,\n}: SetLoginIPRangesPayload) => {\n const login_cidr_list = loginIPRanges;\n\n return axios.put<{ organization: Organization }>(`${getGateURL()}/dashboard/auth/login_ip_range/`, {\n login_cidr_list,\n ignore_cidr_on_two_factor_authentication,\n });\n};\n\nexport const updateSamlConfiguration: UpdateSamlConfigurationAPI = (organization_uid, payload) => {\n return axios.post(`${getGateURL()}/dashboard_api/organizations/${organization_uid}/sso_profile/`, payload);\n};\n\nexport const deleteSamlConfiguration: DeleteSamlConfigurationAPI = (organization_uid) => {\n return axios.delete(`${getGateURL()}/dashboard_api/organizations/${organization_uid}/sso_profile/`);\n};\n\n/**\n *\n * @param payload Transfer payload with organization uid and target member's email\n * @param payload.organization_uid Current organization's uid\n * @param payload.email Target member's email\n */\nexport const transferOwner: TransferOwnerAPI = ({ organization_uid, email }: TransferOwnerPayload) => {\n return axios.post(`${getGateURL()}/dashboard/organization/${organization_uid}/transfer_owner/`, {\n email,\n });\n};\n\nexport const fetchMemberRoles: FetchMemberRolesAPI = ({ uid, limit, offset }) => {\n return gateAxios.get(`${getGateURL()}/dashboard_api/organizations/${uid}/member_roles/`, {\n params: { limit, offset },\n });\n};\n\nexport const getOrganizationAPIKey = ({ organization_uid }) => {\n return axios.get(`${getGateURL()}/dashboard_api/organizations/${organization_uid}/api_key/`);\n};\n\ntype FetchMemberRoleResponse = (roleId: string) => AxiosPromise;\n\nexport const fetchMemberRole: FetchMemberRoleResponse = (roleId: string) => {\n return axios.get(`${getGateURL()}/dashboard_api/organization_member_roles/${roleId}/`);\n};\n\nexport const fetchMemberRoleByName: FetchMemberRoleByNameAPI = (name) => {\n return axios.get(`${getGateURL()}/dashboard_api/organization_member_roles/get_by_name/?name=${name}`);\n};\n\nexport const fetchPermissions: FetchPermissionsAPI = (uid: string) => {\n return gateAxios.get(`/dashboard_api/organizations/${uid}/permissions/`);\n};\n\nexport const createMemberRole: CreateMemberRoleAPI = (payload) => {\n return axios.post(`${getGateURL()}/dashboard_api/organization_member_roles/`, payload);\n};\n\nexport const editMemberRole: EditMemberRoleAPI = ({ roleId, payload }) => {\n return axios.patch(`${getGateURL()}/dashboard_api/organization_member_roles/${roleId}/`, payload);\n};\n\nexport const deleteMemberRole: DeleteMemberRoleAPI = ({ roleId }) => {\n return axios.delete(`${getGateURL()}/dashboard_api/organization_member_roles/${roleId}/`);\n};\n\nexport const renewOrganizationAPIKey = ({ organization_uid }) => {\n return axios.patch(`${getGateURL()}/dashboard_api/organizations/${organization_uid}/renew_api_key/`, {});\n};\n\nexport const startFreeTrial = () => {\n return axios.post(`${getGateURL()}/dashboard_api/billing/subscriptions/start_free_trial/`, {});\n};\n\nexport const enforce2FA = ({ uid, enforce }: Enforce2FAPayload) => {\n return axios.post<{\n organization: Organization;\n }>(`${getGateURL()}/dashboard/auth/enforce_2fa/`, { uid, enforce });\n};\n\nexport type AccessControlSecurityPayload = {\n organization_uid: Organization['uid'];\n} & AccessControlSecurityOptions;\n\nexport const updateAccessControlSecurity = (payload: AccessControlSecurityPayload) => {\n return axios.patch<{ organization: Organization; token: string }>(\n `${getGateURL()}/dashboard/auth/security/`,\n payload,\n );\n};\n","(function(a,b){if(\"function\"==typeof define&&define.amd)define([],b);else if(\"undefined\"!=typeof exports)b();else{b(),a.FileSaver={exports:{}}.exports}})(this,function(){\"use strict\";function b(a,b){return\"undefined\"==typeof b?b={autoBom:!1}:\"object\"!=typeof b&&(console.warn(\"Deprecated: Expected third argument to be a object\"),b={autoBom:!b}),b.autoBom&&/^\\s*(?:text\\/\\S*|application\\/xml|\\S*\\/\\S*\\+xml)\\s*;.*charset\\s*=\\s*utf-8/i.test(a.type)?new Blob([\"\\uFEFF\",a],{type:a.type}):a}function c(a,b,c){var d=new XMLHttpRequest;d.open(\"GET\",a),d.responseType=\"blob\",d.onload=function(){g(d.response,b,c)},d.onerror=function(){console.error(\"could not download file\")},d.send()}function d(a){var b=new XMLHttpRequest;b.open(\"HEAD\",a,!1);try{b.send()}catch(a){}return 200<=b.status&&299>=b.status}function e(a){try{a.dispatchEvent(new MouseEvent(\"click\"))}catch(c){var b=document.createEvent(\"MouseEvents\");b.initMouseEvent(\"click\",!0,!0,window,0,0,0,80,20,!1,!1,!1,!1,0,null),a.dispatchEvent(b)}}var f=\"object\"==typeof window&&window.window===window?window:\"object\"==typeof self&&self.self===self?self:\"object\"==typeof global&&global.global===global?global:void 0,a=f.navigator&&/Macintosh/.test(navigator.userAgent)&&/AppleWebKit/.test(navigator.userAgent)&&!/Safari/.test(navigator.userAgent),g=f.saveAs||(\"object\"!=typeof window||window!==f?function(){}:\"download\"in HTMLAnchorElement.prototype&&!a?function(b,g,h){var i=f.URL||f.webkitURL,j=document.createElement(\"a\");g=g||b.name||\"download\",j.download=g,j.rel=\"noopener\",\"string\"==typeof b?(j.href=b,j.origin===location.origin?e(j):d(j.href)?c(b,g,h):e(j,j.target=\"_blank\")):(j.href=i.createObjectURL(b),setTimeout(function(){i.revokeObjectURL(j.href)},4E4),setTimeout(function(){e(j)},0))}:\"msSaveOrOpenBlob\"in navigator?function(f,g,h){if(g=g||f.name||\"download\",\"string\"!=typeof f)navigator.msSaveOrOpenBlob(b(f,h),g);else if(d(f))c(f,g,h);else{var i=document.createElement(\"a\");i.href=f,i.target=\"_blank\",setTimeout(function(){e(i)})}}:function(b,d,e,g){if(g=g||open(\"\",\"_blank\"),g&&(g.document.title=g.document.body.innerText=\"downloading...\"),\"string\"==typeof b)return c(b,d,e);var h=\"application/octet-stream\"===b.type,i=/constructor/i.test(f.HTMLElement)||f.safari,j=/CriOS\\/[\\d]+/.test(navigator.userAgent);if((j||h&&i||a)&&\"undefined\"!=typeof FileReader){var k=new FileReader;k.onloadend=function(){var a=k.result;a=j?a:a.replace(/^data:[^;]*;/,\"data:attachment/file;\"),g?g.location.href=a:location=a,g=null},k.readAsDataURL(b)}else{var l=f.URL||f.webkitURL,m=l.createObjectURL(b);g?g.location=m:location.href=m,g=null,setTimeout(function(){l.revokeObjectURL(m)},4E4)}});f.saveAs=g.saveAs=g,\"undefined\"!=typeof module&&(module.exports=g)});\n\n//# sourceMappingURL=FileSaver.min.js.map","import { saveAs as fileSaverSaveAs } from 'file-saver';\n\nconst saveAs = ({\n data,\n filename,\n type,\n}: {\n type?: string; // ex 'text/csv;charset=utf-8',\n data: any;\n filename: string;\n}) => {\n const csvBlob = new Blob([data], { type: type || 'text/csv;charset=utf-8' });\n fileSaverSaveAs(csvBlob, filename);\n};\n\nexport default saveAs;\n","import { createAction } from '@reduxjs/toolkit';\nimport axios from 'axios';\n\nimport createAsyncThunk from '@/redux/createAsyncThunk';\nimport {\n deleteSamlConfiguration,\n exportOrganizationMembersList,\n transferOwner,\n updateOrganization,\n updateSamlConfiguration,\n} from '@common/api/organizations';\nimport { DialogType } from '@common/containers/dialogs/DialogType';\nimport { toast } from '@feather/components/notification';\nimport getErrorMessage from '@utils/getErrorMessage';\nimport logException from '@utils/logException';\nimport saveAs from '@utils/saveAs';\nimport toastBadRequestWarning from '@utils/toastBadRequestWarning';\n\nimport { DialogsActions } from './dialogs';\n\ntype SSOConfigurationFormParams = {\n entity_id: string;\n idp_cert: string;\n idp_url: string;\n sso_enforcing: boolean;\n jit_provisioning: boolean;\n sso_default_role: string;\n};\n\nexport const OrganizationsActions = {\n organizationCreated: createAction<{ organizations: Organization[] }>('common/organizations/organizationCreated'),\n organizationUpdated: createAction>('common/organizations/organizationUpdated'),\n\n updateOrganizationName: createAsyncThunk(\n 'common/organizations/updateOrganizationName',\n async (payload, { dispatch, getState, rejectWithValue }) => {\n const { uid } = getState().organizations.current;\n\n try {\n const { data } = await updateOrganization(uid, { name: payload.name });\n\n dispatch(OrganizationsActions.organizationUpdated(data));\n } catch (error) {\n if (axios.isAxiosError(error)) {\n return rejectWithValue(getErrorMessage(error));\n }\n\n logException(error);\n return rejectWithValue(getErrorMessage(error));\n }\n },\n ),\n updateOrganizationSlugName: createAsyncThunk<\n Organization,\n SSOConfigurationFormParams & { slug_name: string },\n { rejectValue: string | null }\n >('common/organizations/updateOrganizationSlugName', async (payload, { dispatch, getState, rejectWithValue }) => {\n const { uid } = getState().organizations.current;\n const { slug_name, ...samlConfigurationPayload } = payload;\n\n try {\n const { data } = await updateOrganization(uid, { slug_name });\n\n dispatch(OrganizationsActions.updateSamlConfiguration(samlConfigurationPayload));\n return data;\n } catch (error) {\n if (axios.isAxiosError(error)) {\n const detail = (error.response?.data as { detail: string })?.detail;\n if (detail) {\n return rejectWithValue(detail);\n }\n return rejectWithValue(getErrorMessage(error));\n }\n\n logException(error);\n return rejectWithValue(getErrorMessage(error));\n }\n }),\n updateSamlConfiguration: createAsyncThunk<\n UpdateSamlConfigurationResponse,\n SSOConfigurationFormParams,\n { rejectValue: string | null }\n >('common/organizations/updateSamlConfiguration', async (payload, { dispatch, getState, rejectWithValue }) => {\n const { uid, slug_name } = getState().organizations.current;\n\n try {\n const { data } = await updateSamlConfiguration(uid, payload);\n\n dispatch(\n DialogsActions.showDialog({\n dialogTypes: DialogType.SamlOneMoreStepToGo,\n dialogProps: {\n organizationKey: slug_name,\n },\n }),\n );\n return data;\n } catch (error) {\n if (axios.isAxiosError(error)) {\n return rejectWithValue(\n window.intl.formatMessage({ id: 'common.authentication.sso.error.samlConfigurationFail' }),\n );\n }\n\n logException(error);\n return rejectWithValue(getErrorMessage(error));\n }\n }),\n updateSamlConfigurationReset: createAction('common/organizations/updateSamlConfigurationReset'),\n\n deleteSamlConfiguration: createAsyncThunk(\n 'common/organizations/deleteSamlConfiguration',\n async (_, { dispatch, getState }) => {\n const { uid } = getState().organizations.current;\n\n try {\n await deleteSamlConfiguration(uid);\n\n dispatch(DialogsActions.hideDialog());\n toast.success({ message: window.intl.formatMessage({ id: 'alerts.samlConfigurationDeleted' }) });\n } catch (error) {\n toastBadRequestWarning(error);\n }\n },\n ),\n\n transferOwner: createAsyncThunk(\n 'common/organizations/transferOwner',\n async (payload, { dispatch, rejectWithValue }) => {\n try {\n await transferOwner({\n organization_uid: payload.organization_uid,\n email: payload.email,\n });\n\n dispatch(DialogsActions.hideDialog());\n toast.success({ message: 'Transferring Owner is completed. You should sign in again.' });\n location.href = '/auth/signout';\n } catch (error) {\n if (axios.isAxiosError(error)) {\n toastBadRequestWarning(error);\n return rejectWithValue(error);\n }\n\n logException(error);\n return rejectWithValue(error);\n }\n },\n ),\n\n exportOrganizationMembers: createAsyncThunk(\n 'common/organizations/exportOrganizationMembers',\n async (_, { getState }) => {\n const { uid } = getState().organizations.current;\n\n try {\n const { data } = await exportOrganizationMembersList(uid);\n\n saveAs({ data, filename: 'organization_member_list.csv' });\n } catch (error) {\n logException(error);\n }\n },\n ),\n};\n","import { createReducer } from '@reduxjs/toolkit';\nimport { createSelector } from 'reselect';\n\nimport { AuthenticationActions } from '@common/redux/actions/authentication';\nimport { OrganizationsActions } from '@common/redux/actions/organizations';\n\nconst currentOrganizationSelector = createSelector(\n (state: ReadonlyArray) => state,\n (organizations) => {\n return organizations.length > 0 ? organizations[0] : ({} as Organization);\n },\n);\n\ninterface OrganizationsState {\n isFetching: boolean;\n updateOrganizationName: {\n isFetching: boolean;\n error: string | null;\n };\n updateOrganizationSlugName: {\n isFetching: boolean;\n error: string | null;\n timestamp?: number;\n };\n samlConfigurationForm: {\n isFetching: boolean;\n isSaving: boolean;\n error: string | null;\n lastUpdatedTimestamp?: number;\n };\n current: Organization;\n}\n\nconst initialState: OrganizationsState = {\n isFetching: false,\n updateOrganizationName: {\n isFetching: false,\n error: null,\n },\n updateOrganizationSlugName: {\n isFetching: false,\n error: null,\n },\n samlConfigurationForm: {\n isFetching: false,\n isSaving: false,\n error: null,\n },\n current: {} as Organization,\n};\n\nexport const organizationsReducer = createReducer(initialState, (builder) => {\n // OrganizationsActions\n builder\n .addCase(OrganizationsActions.organizationCreated, (state, { payload }) => {\n state.current = currentOrganizationSelector(payload.organizations);\n state.isFetching = false;\n })\n .addCase(OrganizationsActions.organizationUpdated, (state, { payload }) => {\n state.isFetching = false;\n state.current = {\n ...state.current,\n ...payload,\n };\n })\n .addCase(OrganizationsActions.updateOrganizationName.pending, (state) => {\n state.updateOrganizationName = {\n isFetching: true,\n error: null,\n };\n })\n .addCase(OrganizationsActions.updateOrganizationName.fulfilled, (state) => {\n state.updateOrganizationName = {\n isFetching: false,\n error: null,\n };\n })\n .addCase(OrganizationsActions.updateOrganizationName.rejected, (state, { payload }) => {\n state.updateOrganizationName = {\n isFetching: false,\n error: payload ?? null,\n };\n })\n .addCase(OrganizationsActions.updateOrganizationSlugName.pending, (state) => {\n state.updateOrganizationSlugName.isFetching = true;\n })\n .addCase(OrganizationsActions.updateOrganizationSlugName.fulfilled, (state, { payload }) => {\n state.current = payload;\n state.updateOrganizationSlugName = {\n isFetching: false,\n error: null,\n timestamp: Date.now(),\n };\n })\n .addCase(OrganizationsActions.updateOrganizationSlugName.rejected, (state, { payload }) => {\n state.updateOrganizationSlugName = {\n isFetching: false,\n error: payload ?? null,\n };\n })\n .addCase(OrganizationsActions.updateSamlConfiguration.pending, (state) => {\n state.samlConfigurationForm.isFetching = false;\n state.samlConfigurationForm.isSaving = true;\n })\n .addCase(OrganizationsActions.updateSamlConfiguration.fulfilled, (state, { payload }) => {\n const { sso_entity_id, sso_idp_url, sso_idp_cert, sso_enforcing, sso_jit_provisioning, sso_default_role } =\n payload;\n state.current.sso_entity_id = sso_entity_id;\n state.current.sso_idp_url = sso_idp_url;\n state.current.sso_idp_cert = sso_idp_cert;\n state.current.sso_enforcing = sso_enforcing;\n state.current.sso_jit_provisioning = sso_jit_provisioning;\n state.current.sso_default_role = sso_default_role;\n state.samlConfigurationForm = {\n isFetching: false,\n isSaving: false,\n error: null,\n lastUpdatedTimestamp: Date.now(),\n };\n })\n .addCase(OrganizationsActions.updateSamlConfiguration.rejected, (state, { payload }) => {\n state.samlConfigurationForm = {\n isFetching: false,\n isSaving: false,\n error: payload ?? null,\n };\n })\n .addCase(OrganizationsActions.updateSamlConfigurationReset, (state) => {\n state.samlConfigurationForm = initialState.samlConfigurationForm;\n });\n\n // Other actions\n builder\n .addCase(AuthenticationActions.authenticated, (state, { payload }) => {\n state.current = currentOrganizationSelector(payload.organizations);\n })\n .addCase(AuthenticationActions.unauthenticated, () => initialState);\n});\n","import { createReducer } from '@reduxjs/toolkit';\n\nimport { AuthenticationActions } from '@common/redux/actions/authentication';\nimport { ApplicationActions } from '@core/redux/actions/application';\n\nconst patchApplicationName = (\n application: T | null,\n params: { app_id: string; app_name: string },\n) => {\n if (application?.app_id === params.app_id) {\n return { ...application, app_name: params.app_name };\n }\n return application;\n};\n\ninterface ApplicationState {\n isFetching: boolean;\n /**\n * contains ApplicationSummary object of the currently being fetched application.\n */\n applicationSummary: ApplicationSummary | null;\n data: Application | null;\n}\n\nconst initialState: ApplicationState = {\n isFetching: false,\n applicationSummary: null,\n data: null,\n};\n\nexport const applicationStateReducer = createReducer(initialState, (builder) => {\n // ApplicationActions\n builder\n .addCase(ApplicationActions.fetchApplication.pending, (state, { meta }) => {\n state.isFetching = true;\n state.applicationSummary = meta.arg.applicationSummary || state.applicationSummary;\n })\n .addCase(ApplicationActions.applicationFetched, (state, { payload }) => {\n state.isFetching = false;\n state.data = payload;\n })\n .addCase(ApplicationActions.fetchApplication.rejected, (state) => {\n state.isFetching = false;\n state.applicationSummary = null;\n })\n .addCase(ApplicationActions.applicationSet, (state, { payload }) => {\n state.data = payload;\n })\n .addCase(ApplicationActions.applicationAttributesUpdated, (state, { payload }) => {\n if (state.data) {\n state.data.attrs = { ...state.data.attrs, ...payload };\n }\n })\n .addCase(ApplicationActions.applicationUpdated, (state, { payload }) => {\n if (state.data) {\n state.data = { ...state.data, ...payload };\n }\n })\n .addCase(ApplicationActions.changeAppName.fulfilled, (state, { payload }) => {\n const updates = {\n applicationSummary: patchApplicationName(state.applicationSummary, payload),\n data: patchApplicationName(state.data, payload),\n };\n\n if (updates.applicationSummary !== state.applicationSummary || updates.data !== state.data) {\n state.applicationSummary = patchApplicationName(state.applicationSummary, payload);\n state.data = patchApplicationName(state.data, payload);\n }\n })\n .addCase(ApplicationActions.applicationReset, () => initialState);\n\n // Other actions\n builder.addCase(AuthenticationActions.unauthenticated, () => initialState);\n});\n","import { createAction } from '@reduxjs/toolkit';\nimport axios from 'axios';\n\nimport createAsyncThunk from '@/redux/createAsyncThunk';\nimport { getApplicationSummary } from '@core/api/application';\nimport {\n addCredentialsFilter,\n fetchPushMessageTemplates,\n getWebhooksAllCategories,\n getWebhooksInformation,\n removeCredentialsFilter,\n togglePushEnabled,\n updateAccessTokenUserPolicy,\n updateAutoEventMessage,\n updateIgnoreMessageOffset,\n updateMaxLengthMessage,\n updateModerationInfoADMM,\n updatePushMessageTemplates,\n updateWebhookInformation,\n} from '@core/api/settings';\nimport { selectApplicationData } from '@core/redux/selectors/applicationState';\nimport { toast } from '@feather/components/notification';\nimport logException from '@utils/logException';\nimport {\n ALERT_SETTINGS_ACCESS_TOKEN_POLICY,\n ALERT_SETTINGS_AUTO_EVENT_MESSAGE,\n ALERT_SETTINGS_CREDENTIAL_FILTER_ADDED,\n ALERT_SETTINGS_CREDENTIAL_FILTER_DELETED,\n ALERT_SETTINGS_DISPLAY_PAST_MESSAGE_OFF,\n ALERT_SETTINGS_DISPLAY_PAST_MESSAGE_ON,\n ALERT_SETTINGS_MAX_LENGTH_OF_MESSAGE,\n ALERT_SETTINGS_PUSH_DISABLED,\n ALERT_SETTINGS_PUSH_ENABLED,\n ALERT_SETTINGS_PUSH_NOTIFICATION_TEMPLATES,\n ALERT_SETTINGS_WEBHOOKS,\n} from '@utils/text';\nimport toastBadRequestWarning from '@utils/toastBadRequestWarning';\n\nimport { ApplicationActions } from './application';\n\nexport const SettingsActions = {\n applicationDeleted: createAction<{ appId: Application['app_id'] }>('core/settings/applicationDeleted'),\n\n // push\n togglePushEnabled: createAsyncThunk(\n 'core/settings/togglePushEnabled',\n async (payload, { dispatch, getState, rejectWithValue }) => {\n const application = selectApplicationData(getState());\n\n try {\n const { data } = await togglePushEnabled({ appId: application.app_id, push_enabled: payload });\n\n toast.success({ message: payload ? ALERT_SETTINGS_PUSH_ENABLED : ALERT_SETTINGS_PUSH_DISABLED });\n dispatch(ApplicationActions.applicationSet({ ...application, push_enabled: data.application.push_enabled }));\n } catch (error) {\n if (axios.isAxiosError(error)) {\n toastBadRequestWarning(error);\n return rejectWithValue(error);\n }\n\n logException(error);\n return rejectWithValue(error);\n }\n },\n ),\n\n fetchPushMessageTemplates: createAsyncThunk(\n 'core/settings/fetchPushMessageTemplates',\n async (_, { getState, rejectWithValue }) => {\n const appId = selectApplicationData(getState()).app_id;\n\n try {\n await fetchPushMessageTemplates({ appId });\n } catch (error) {\n if (axios.isAxiosError(error)) {\n toastBadRequestWarning(error);\n return rejectWithValue(error);\n }\n\n logException(error);\n return rejectWithValue(error);\n }\n },\n ),\n updatePushMessageTemplates: createAsyncThunk<\n void,\n {\n templateName: 'default' | 'alternative';\n payload: { template: { MESG: PushMessageTemplate; FILE: PushMessageTemplate; ADMM: PushMessageTemplate } };\n }\n >('core/settings/updatePushMessageTemplates', async (payload, { dispatch, getState, rejectWithValue }) => {\n const application = selectApplicationData(getState());\n\n try {\n const { data } = await updatePushMessageTemplates({\n appId: application.app_id,\n templateName: payload.templateName,\n payload: payload.payload,\n });\n\n const newApp = { ...application };\n data.push_message_templates.forEach(({ template_name, template }) => {\n newApp.attrs = {\n ...newApp.attrs,\n push_message_templates: {\n ...newApp.attrs.push_message_templates,\n [template_name]: template,\n },\n };\n });\n\n toast.success({ message: ALERT_SETTINGS_PUSH_NOTIFICATION_TEMPLATES });\n dispatch(ApplicationActions.applicationSet(newApp));\n } catch (error) {\n if (axios.isAxiosError(error)) {\n toastBadRequestWarning(error);\n return rejectWithValue(error);\n }\n\n logException(error);\n return rejectWithValue(error);\n }\n }),\n\n getWebhookAllCategories: createAsyncThunk(\n 'core/settings/getWebhookAllCategories',\n async (_, { getState, rejectWithValue }) => {\n const appId = selectApplicationData(getState()).app_id;\n\n try {\n const { data } = await getWebhooksAllCategories({ appId });\n\n return data.webhook ? data.webhook.all_webhook_categories : data.all_webhook_categories;\n } catch (error) {\n if (axios.isAxiosError(error)) {\n toastBadRequestWarning(error);\n return rejectWithValue(error);\n }\n\n logException(error);\n return rejectWithValue(error);\n }\n },\n ),\n getWebhooksInformation: createAsyncThunk(\n 'core/settings/getWebhookInformation',\n async (_, { getState, rejectWithValue }) => {\n const appId = selectApplicationData(getState()).app_id;\n\n try {\n const { data } = await getWebhooksInformation({ appId });\n\n return data.webhook;\n } catch (error) {\n if (axios.isAxiosError(error)) {\n toastBadRequestWarning(error);\n return rejectWithValue(error);\n }\n\n logException(error);\n return rejectWithValue(error);\n }\n },\n ),\n updateWebhookInformation: createAsyncThunk<\n WebhookSetting,\n {\n enabled_events?: WebhookEvents[];\n enabled: boolean;\n include_members: boolean;\n include_unread_count: boolean;\n events_to_include_channel_metadata?: WebhookEvents[];\n url: string;\n }\n >('core/settings/updateWebhookInformation', async (payload, { dispatch, getState, rejectWithValue }) => {\n const application = selectApplicationData(getState());\n\n try {\n const { data } = await updateWebhookInformation({\n appId: application.app_id,\n enabled: payload.enabled,\n enabled_events: payload.enabled_events,\n url: payload.url,\n include_members: payload.include_members,\n include_unread_count: payload.include_unread_count,\n events_to_include_channel_metadata: payload.events_to_include_channel_metadata,\n });\n\n const newApp = {\n ...application,\n attrs: {\n ...application.attrs,\n webhook: data.webhook as unknown as WebhookAttribute,\n },\n };\n\n toast.success({ message: ALERT_SETTINGS_WEBHOOKS });\n dispatch(ApplicationActions.applicationSet(newApp));\n return data.webhook;\n } catch (error) {\n if (axios.isAxiosError(error)) {\n toastBadRequestWarning(error);\n return rejectWithValue(error);\n }\n\n logException(error);\n return rejectWithValue(error);\n }\n }),\n\n updateMaxLengthMessage: createAsyncThunk(\n 'core/settings/updateMaxLengthMessage',\n async (payload, { dispatch, getState, rejectWithValue }) => {\n const application = selectApplicationData(getState());\n\n try {\n const { data } = await updateMaxLengthMessage({\n appId: application.app_id,\n max_length_message: payload.max_length_message,\n });\n\n const newApp = {\n ...application,\n max_length_message: data.max_length_message,\n };\n\n toast.success({ message: ALERT_SETTINGS_MAX_LENGTH_OF_MESSAGE });\n dispatch(ApplicationActions.applicationSet(newApp));\n } catch (error) {\n if (axios.isAxiosError(error)) {\n toastBadRequestWarning(error);\n return rejectWithValue(error);\n }\n\n logException(error);\n return rejectWithValue(error);\n }\n },\n ),\n\n updateIgnoreMessageOffset: createAsyncThunk(\n 'core/settings/updateIgnoreMessageOffset',\n async (payload, { dispatch, getState, rejectWithValue }) => {\n const application = selectApplicationData(getState());\n\n try {\n const { data } = await updateIgnoreMessageOffset({\n appId: application.app_id,\n ignore_message_offset: payload,\n });\n\n const newApp = {\n ...application,\n ignore_message_offset: data.ignore_message_offset,\n };\n\n data.ignore_message_offset\n ? toast.success({ message: ALERT_SETTINGS_DISPLAY_PAST_MESSAGE_ON })\n : toast.success({ message: ALERT_SETTINGS_DISPLAY_PAST_MESSAGE_OFF });\n dispatch(ApplicationActions.applicationSet(newApp));\n } catch (error) {\n if (axios.isAxiosError(error)) {\n toastBadRequestWarning(error);\n return rejectWithValue(error);\n }\n\n logException(error);\n return rejectWithValue(error);\n }\n },\n ),\n\n updateAutoEventMessage: createAsyncThunk<\n void,\n {\n auto_event_message: Omit<\n AutoEventMessageAttribute,\n 'whitelist_customTypes' | 'message_templates' | 'include_last_message' | 'only_update_last_message_in_super'\n >;\n }\n >('core/settings/updateAutoEventMessage', async (payload, { dispatch, getState, rejectWithValue }) => {\n const application = selectApplicationData(getState());\n\n try {\n const { data } = await updateAutoEventMessage({\n appId: application.app_id,\n auto_event_message: payload.auto_event_message,\n });\n\n const newApp = {\n ...application,\n attrs: {\n ...application.attrs,\n auto_event_message: data.auto_event_message,\n },\n };\n\n toast.success({ message: ALERT_SETTINGS_AUTO_EVENT_MESSAGE });\n dispatch(ApplicationActions.applicationSet(newApp));\n } catch (error) {\n if (axios.isAxiosError(error)) {\n toastBadRequestWarning(error);\n return rejectWithValue(error);\n }\n\n logException(error);\n return rejectWithValue(error);\n }\n }),\n\n updateAccessTokenUserPolicy: createAsyncThunk(\n 'core/settings/updateAccessTokenUserPolicy',\n async (payload, { dispatch, getState, rejectWithValue }) => {\n const application = selectApplicationData(getState());\n\n try {\n const { data } = await updateAccessTokenUserPolicy({\n appId: application.app_id,\n guest_user_policy: payload.guest_user_policy,\n });\n\n const newApp = {\n ...application,\n guest_user_policy: data.guest_user_policy,\n };\n\n toast.success({ message: ALERT_SETTINGS_ACCESS_TOKEN_POLICY });\n dispatch(ApplicationActions.applicationSet(newApp));\n } catch (error) {\n if (axios.isAxiosError(error)) {\n toastBadRequestWarning(error);\n return rejectWithValue(error);\n }\n\n logException(error);\n return rejectWithValue(error);\n }\n },\n ),\n\n addCredentialsFilter: createAsyncThunk(\n 'core/settings/addCredentialsFilter',\n async (payload, { dispatch, getState, rejectWithValue }) => {\n const application = selectApplicationData(getState());\n\n try {\n const { data } = await addCredentialsFilter({\n appId: application.app_id,\n credentials_key: payload.allowedDomain,\n });\n\n const newApp = {\n ...application,\n credentials_list: application.credentials_list.concat([data]),\n };\n\n toast.success({ message: ALERT_SETTINGS_CREDENTIAL_FILTER_ADDED });\n dispatch(ApplicationActions.applicationSet(newApp));\n } catch (error) {\n if (axios.isAxiosError(error)) {\n toastBadRequestWarning(error);\n return rejectWithValue(error);\n }\n\n logException(error);\n return rejectWithValue(error);\n }\n },\n ),\n removeCredentialsFilter: createAsyncThunk(\n 'core/settings/removeCredentialsFilter',\n async (payload, { dispatch, getState, rejectWithValue }) => {\n const application = selectApplicationData(getState());\n\n try {\n const { data } = await removeCredentialsFilter({\n appId: application.app_id,\n id: payload,\n });\n\n const newApp = {\n ...application,\n credentials_list: application.credentials_list.filter((credential) => {\n return credential.id !== data.id;\n }),\n };\n\n toast.success({ message: ALERT_SETTINGS_CREDENTIAL_FILTER_DELETED });\n dispatch(ApplicationActions.applicationSet(newApp));\n } catch (error) {\n if (axios.isAxiosError(error)) {\n toastBadRequestWarning(error);\n return rejectWithValue(error);\n }\n\n logException(error);\n return rejectWithValue(error);\n }\n },\n ),\n\n fetchModeratorInfoADMM: createAsyncThunk(\n 'core/settings/fetchModeratorInfoADMM',\n async (_, { getState, rejectWithValue }) => {\n const { app_id } = selectApplicationData(getState());\n\n try {\n const { data } = await getApplicationSummary({ app_id });\n\n return data.is_moderator_info_in_admin_message;\n } catch (error) {\n if (axios.isAxiosError(error)) {\n toastBadRequestWarning(error);\n return rejectWithValue(error);\n }\n\n logException(error);\n return rejectWithValue(error);\n }\n },\n ),\n updateModeratorInfoADMM: createAsyncThunk(\n 'core/settings/updateModeratorInfoADMM',\n async (payload, { getState, rejectWithValue }) => {\n const appId = selectApplicationData(getState()).app_id;\n\n try {\n const { data } = await updateModerationInfoADMM({ appId, is_moderator_info_in_admin_message: payload });\n\n toast.success({ message: 'Moderation information in Admin Message has been changed' });\n return data.is_moderator_info_in_admin_message;\n } catch (error) {\n if (axios.isAxiosError(error)) {\n toastBadRequestWarning(error);\n return rejectWithValue(error);\n }\n\n logException(error);\n return rejectWithValue(error);\n }\n },\n ),\n};\n","import { createReducer, isAnyOf } from '@reduxjs/toolkit';\n\nimport { AuthenticationActions } from '@common/redux/actions/authentication';\nimport { ApplicationActions } from '@core/redux/actions/application';\nimport { SettingsActions } from '@core/redux/actions/settings';\n\nexport interface SettingsState {\n isFetchingAppName: boolean;\n isFetchingPushMessageTemplates: boolean;\n\n isFetchingWebhookInformation: boolean;\n isFetchingMaxLengthMessage: boolean;\n isFetchingIgnoreMessageOffset: boolean;\n isFetchingAutoEventMessage: boolean;\n isFetchingAccessTokenUserPolicy: boolean;\n isAddingCredentialsFilter: boolean;\n isFetchingModeratorInfoADMM: boolean;\n\n isPushMessageTemplatesFetched: boolean; // push message templates called check\n\n isModeratorInfoInAdminMessage: boolean;\n\n isFetchedWebhook: boolean;\n webhook: WebhookSetting;\n webhookAllEvents: string[];\n}\n\nconst initialState: SettingsState = {\n isFetchingAppName: false,\n isFetchingPushMessageTemplates: false,\n\n isFetchingWebhookInformation: false,\n isFetchingMaxLengthMessage: false,\n isFetchingIgnoreMessageOffset: false,\n isFetchingAutoEventMessage: false,\n isFetchingAccessTokenUserPolicy: false,\n isAddingCredentialsFilter: false,\n isFetchingModeratorInfoADMM: false,\n\n isPushMessageTemplatesFetched: false,\n\n isFetchedWebhook: false,\n webhook: {\n enabled: false,\n url: '',\n include_members: false,\n include_unread_count: false,\n enabled_events: [],\n events_to_include_channel_metadata: [],\n },\n webhookAllEvents: [],\n\n isModeratorInfoInAdminMessage: false,\n};\n\nexport const settingsReducer = createReducer(initialState, (builder) => {\n // SettingsActions\n builder\n .addCase(SettingsActions.getWebhookAllCategories.pending, (state) => {\n state.isFetchingWebhookInformation = true;\n })\n .addCase(SettingsActions.getWebhookAllCategories.fulfilled, (state, { payload }) => {\n const webhookAllEvents = payload;\n state.webhookAllEvents = webhookAllEvents;\n state.isFetchingWebhookInformation = false;\n })\n .addCase(SettingsActions.getWebhookAllCategories.rejected, (state) => {\n state.isFetchingWebhookInformation = false;\n })\n .addCase(SettingsActions.getWebhooksInformation.pending, (state) => {\n state.isFetchedWebhook = false;\n state.isFetchingWebhookInformation = true;\n })\n .addCase(SettingsActions.getWebhooksInformation.fulfilled, (state, { payload }) => {\n const webhook = payload;\n state.webhook = webhook;\n state.isFetchedWebhook = true;\n state.isFetchingWebhookInformation = false;\n })\n .addCase(SettingsActions.getWebhooksInformation.rejected, (state) => {\n state.isFetchedWebhook = false;\n state.isFetchingWebhookInformation = false;\n })\n .addCase(SettingsActions.updateWebhookInformation.pending, (state) => {\n state.isFetchingWebhookInformation = true;\n })\n .addCase(SettingsActions.updateWebhookInformation.fulfilled, (state, { payload }) => {\n const webhook = payload;\n state.webhook = webhook;\n state.isFetchingWebhookInformation = false;\n })\n .addCase(SettingsActions.updateWebhookInformation.rejected, (state) => {\n state.isFetchingWebhookInformation = false;\n })\n .addCase(SettingsActions.updateMaxLengthMessage.pending, (state) => {\n state.isFetchingMaxLengthMessage = true;\n })\n .addCase(SettingsActions.updateMaxLengthMessage.fulfilled, (state) => {\n state.isFetchingMaxLengthMessage = false;\n })\n .addCase(SettingsActions.updateIgnoreMessageOffset.pending, (state) => {\n state.isFetchingIgnoreMessageOffset = true;\n })\n .addCase(SettingsActions.updateAutoEventMessage.pending, (state) => {\n state.isFetchingAutoEventMessage = true;\n })\n .addCase(SettingsActions.updateAccessTokenUserPolicy.pending, (state) => {\n state.isFetchingAccessTokenUserPolicy = true;\n })\n .addCase(SettingsActions.addCredentialsFilter.pending, (state) => {\n state.isAddingCredentialsFilter = true;\n });\n\n // Other actions\n builder.addCase(ApplicationActions.changeAppName.pending, (state) => {\n state.isFetchingAppName = true;\n });\n\n // SettingsActions\n builder\n .addMatcher(\n isAnyOf(SettingsActions.fetchPushMessageTemplates.pending, SettingsActions.updatePushMessageTemplates.pending),\n (state) => {\n state.isFetchingPushMessageTemplates = true;\n },\n )\n .addMatcher(\n isAnyOf(\n SettingsActions.fetchPushMessageTemplates.fulfilled,\n SettingsActions.updatePushMessageTemplates.fulfilled,\n ),\n (state) => {\n if (state.isPushMessageTemplatesFetched) {\n state.isFetchingPushMessageTemplates = false;\n } else {\n state.isPushMessageTemplatesFetched = true;\n state.isFetchingPushMessageTemplates = false;\n }\n },\n )\n .addMatcher(\n isAnyOf(SettingsActions.fetchPushMessageTemplates.rejected, SettingsActions.updatePushMessageTemplates.rejected),\n (state) => {\n state.isFetchingPushMessageTemplates = false;\n },\n )\n .addMatcher(\n isAnyOf(SettingsActions.updateIgnoreMessageOffset.fulfilled, SettingsActions.updateIgnoreMessageOffset.rejected),\n (state) => {\n state.isFetchingIgnoreMessageOffset = false;\n },\n )\n .addMatcher(\n isAnyOf(SettingsActions.updateAutoEventMessage.fulfilled, SettingsActions.updateAutoEventMessage.rejected),\n (state) => {\n state.isFetchingAutoEventMessage = false;\n },\n )\n .addMatcher(\n isAnyOf(\n SettingsActions.updateAccessTokenUserPolicy.fulfilled,\n SettingsActions.updateAccessTokenUserPolicy.rejected,\n ),\n (state) => {\n state.isFetchingAccessTokenUserPolicy = false;\n },\n )\n .addMatcher(\n isAnyOf(SettingsActions.addCredentialsFilter.fulfilled, SettingsActions.addCredentialsFilter.rejected),\n (state) => {\n state.isAddingCredentialsFilter = false;\n },\n )\n .addMatcher(\n isAnyOf(SettingsActions.fetchModeratorInfoADMM.pending, SettingsActions.updateModeratorInfoADMM.pending),\n (state) => {\n state.isFetchingModeratorInfoADMM = true;\n },\n )\n .addMatcher(\n isAnyOf(SettingsActions.fetchModeratorInfoADMM.fulfilled, SettingsActions.updateModeratorInfoADMM.fulfilled),\n (state, { payload }) => {\n state.isFetchingModeratorInfoADMM = false;\n state.isModeratorInfoInAdminMessage = payload;\n },\n )\n .addMatcher(\n isAnyOf(SettingsActions.fetchModeratorInfoADMM.rejected, SettingsActions.updateModeratorInfoADMM.rejected),\n (state) => {\n state.isFetchingModeratorInfoADMM = false;\n },\n );\n\n // Other actions\n builder\n .addMatcher(\n isAnyOf(ApplicationActions.changeAppName.fulfilled, ApplicationActions.changeAppName.rejected),\n (state) => {\n state.isFetchingAppName = false;\n },\n )\n .addMatcher(\n isAnyOf(ApplicationActions.applicationReset, AuthenticationActions.unauthenticated),\n () => initialState,\n );\n});\n","import type { AxiosRequestConfig, AxiosRequestHeaders } from 'axios';\nimport defaultsDeep from 'lodash/defaultsDeep';\n\nimport { CancellableAxios, HttpMethod } from '@api/cancellableAxios';\nimport { getDeskURL } from '@api/shared';\n\nexport default class DeskApiAxios extends CancellableAxios {\n private baseURL: string;\n private defaultHeaders: AxiosRequestHeaders;\n\n constructor({ pid, region }: { pid: string; region: string }) {\n super();\n\n this.baseURL = `${getDeskURL(region)}/api`;\n this.defaultHeaders = {\n ...(pid && { pid }),\n };\n }\n\n private mergeConfigWithDefault = (config: AxiosRequestConfig): AxiosRequestConfig => {\n return defaultsDeep(config, {\n // FIXME(DFE-656): baseURL can't be used in test suites\n // baseURL: this.baseURL,\n headers: this.defaultHeaders,\n withCredentials: true,\n });\n };\n\n /**\n * Don't forget to add trailing slash('/') our API server will expect\n * trailing slash(especially DRF related servers), Chrome automatically fix this but\n * Safari doesn't so please always add slash after URL.\n */\n public get = (url: string, config: AxiosRequestConfig = {}) =>\n this.makeRequest({\n method: HttpMethod.Get,\n url: `${this.baseURL}/${url}`,\n config: this.mergeConfigWithDefault(config),\n });\n\n /**\n * Don't forget to add trailing slash('/') our API server will expect\n * trailing slash(especially DRF related servers), Chrome automatically fix this but\n * Safari doesn't so please always add slash after URL.\n */\n public delete = (url: string, config: AxiosRequestConfig = {}) =>\n this.makeRequest({\n method: HttpMethod.Delete,\n url: `${this.baseURL}/${url}`,\n config: this.mergeConfigWithDefault(config),\n });\n\n /**\n * Don't forget to add trailing slash('/') our API server will expect\n * trailing slash(especially DRF related servers), Chrome automatically fix this but\n * Safari doesn't so please always add slash after URL.\n */\n public head = (url: string, config: AxiosRequestConfig = {}) =>\n this.makeRequest({\n method: HttpMethod.Head,\n url: `${this.baseURL}/${url}`,\n config: this.mergeConfigWithDefault(config),\n });\n\n /**\n * Don't forget to add trailing slash('/') our API server will expect\n * trailing slash(especially DRF related servers), Chrome automatically fix this but\n * Safari doesn't so please always add slash after URL.\n */\n public post = (url: string, data?: any, config: AxiosRequestConfig = {}) =>\n this.makeRequest({\n method: HttpMethod.Post,\n url: `${this.baseURL}/${url}`,\n data,\n config: this.mergeConfigWithDefault(config),\n });\n\n /**\n * Don't forget to add trailing slash('/') our API server will expect\n * trailing slash(especially DRF related servers), Chrome automatically fix this but\n * Safari doesn't so please always add slash after URL.\n */\n public put = (url: string, data?: any, config: AxiosRequestConfig = {}) =>\n this.makeRequest({\n method: HttpMethod.Put,\n url: `${this.baseURL}/${url}`,\n data,\n config: this.mergeConfigWithDefault(config),\n });\n\n /**\n * Don't forget to add trailing slash('/') our API server will expect\n * trailing slash(especially DRF related servers), Chrome automatically fix this but\n * Safari doesn't so please always add slash after URL.\n */\n public patch = (url: string, data?: any, config: AxiosRequestConfig = {}) =>\n this.makeRequest({\n method: HttpMethod.Patch,\n url: `${this.baseURL}/${url}`,\n data,\n config: this.mergeConfigWithDefault(config),\n });\n}\n","import { snakeCaseKeys } from '@utils/ObjectKeyConverter';\n\nimport DeskApiAxios from './DeskApiAxios';\n\nexport const fetchAgentGroups: FetchAgentGroupsAPI = (pid, region, { offset, limit, query, isBotOnly }) => {\n const axios = new DeskApiAxios({ pid, region });\n return axios.get('projects/groups/', { params: snakeCaseKeys({ offset, limit, query, isBotOnly }) });\n};\n\nexport const fetchAgentGroup: FetchAgentGroupAPI = (pid, region, { groupId }) => {\n const axios = new DeskApiAxios({ pid, region });\n return axios.get(`groups/${groupId}/`);\n};\n\nexport const createAgentGroup: CreateAgentGroupAPI = (pid, region, { name, key, description, agents }) => {\n const axios = new DeskApiAxios({ pid, region });\n return axios.post('groups/', { name, key, description, agents });\n};\n\nexport const updateAgentGroup: UpdateAgentGroupAPI = (pid, region, { groupId, name, agents, description }) => {\n const axios = new DeskApiAxios({ pid, region });\n return axios.patch(`groups/${groupId}/`, { name, agents, description });\n};\n\nexport const deleteAgentGroup: DeleteAgentGroupAPI = (pid, region, { groupId, transferTargetGroupId }) => {\n const axios = new DeskApiAxios({ pid, region });\n return axios.patch(`groups/${groupId}/inactive/`, { transferTargetGroupId });\n};\n\nexport const checkAgentGroupKeyDuplicate: CheckAgentGroupKeyDuplicateAPI = (pid, region, params) => {\n const axios = new DeskApiAxios({ pid, region });\n return axios.get('groups/key_duplicate_check', { params });\n};\n\nexport const checkAgentGroupNameDuplicate: CheckAgentGroupNameDuplicateAPI = (pid, region, params) => {\n const axios = new DeskApiAxios({ pid, region });\n return axios.get('groups/name_duplicate_check', { params });\n};\n\nexport const searchAgentGroups: SearchAgentGroupsAPI = (pid, region, { name }) => {\n const axios = new DeskApiAxios({ pid, region });\n return axios.get('groups/search/', { params: { name } });\n};\n","import type { RootState } from '@/store';\n\nexport const selectDeskProject = (state: RootState) => state.desk.project;\n","import { createAction } from '@reduxjs/toolkit';\nimport axios from 'axios';\n\nimport { browserRouter } from '@/browserRouter';\nimport createAsyncThunk from '@/redux/createAsyncThunk';\nimport { AGENT_GROUP_LIST_LIMIT } from '@constants';\nimport { selectApplicationData } from '@core/redux/selectors/applicationState';\nimport { deleteAgentGroup, fetchAgentGroups } from '@desk/api/agentGroups';\nimport logException from '@utils/logException';\nimport toastBadRequestWarning from '@utils/toastBadRequestWarning';\n\nimport { selectDeskProject } from '../selectors/desk';\n\nexport const AgentGroupsActions = {\n fetchAgentGroups: createAsyncThunk<\n { items: AgentGroup<'listItem'>[]; pagination: { offset: number; limit: number; count: number; page: number } },\n FetchAgentGroupsPayload\n >('desk/agentGroups/fetchAgentGroups', async (payload, { getState, rejectWithValue }) => {\n const { region } = selectApplicationData(getState());\n const { pid } = selectDeskProject(getState());\n const { offset = 0, limit = AGENT_GROUP_LIST_LIMIT, query } = payload;\n\n try {\n const { data } = await fetchAgentGroups(pid, region, { offset, limit, query });\n\n return {\n items: data.results,\n pagination: {\n offset,\n limit,\n count: data.count,\n page: offset / limit + 1,\n },\n };\n } catch (error) {\n if (axios.isAxiosError(error)) {\n toastBadRequestWarning(error);\n return rejectWithValue(error || '');\n }\n\n logException(error);\n return rejectWithValue(error);\n }\n }),\n\n deleteAgentGroup: createAsyncThunk(\n 'desk/agentGroups/deleteAgentGroup',\n async (payload, { dispatch, getState, rejectWithValue }) => {\n const { app_id, region } = selectApplicationData(getState());\n const { pid } = selectDeskProject(getState());\n const { groupId, transferTargetGroupId, needFetchList = false } = payload;\n\n try {\n await deleteAgentGroup(pid, region, { groupId, transferTargetGroupId });\n\n if (needFetchList) {\n dispatch(AgentGroupsActions.fetchAgentGroups({}));\n }\n browserRouter.navigate(`/${app_id}/desk/settings/teams`);\n } catch (error) {\n if (axios.isAxiosError(error)) {\n toastBadRequestWarning(error);\n return rejectWithValue(error || '');\n }\n\n logException(error);\n return rejectWithValue(error);\n }\n },\n ),\n\n agentGroupQueryUpdated: createAction('desk/agentGroups/agentGroupQueryUpdated'),\n\n agentGroupsReset: createAction('desk/agentGroups/agentGroupsReset'),\n};\n","import { createReducer } from '@reduxjs/toolkit';\n\nimport { AuthenticationActions } from '@common/redux/actions/authentication';\nimport { AGENT_GROUP_LIST_LIMIT } from '@constants';\nimport { AgentGroupsActions } from '@desk/redux/actions/agentGroups';\n\nexport interface AgentGroupsState {\n isFetching: boolean;\n items: Array>;\n query: string;\n current: {\n agentSearchQuery: string;\n agents: Pick[];\n };\n pagination: LimitOffsetPagination;\n}\n\nconst initialState: AgentGroupsState = {\n isFetching: false,\n items: [],\n query: '',\n current: {\n agentSearchQuery: '',\n agents: [],\n },\n pagination: {\n offset: 0,\n limit: AGENT_GROUP_LIST_LIMIT,\n count: 0,\n page: 1,\n } as LimitOffsetPagination,\n};\n\nexport const agentGroupsReducer = createReducer(initialState, (builder) => {\n // AgentGroupsActions\n builder\n .addCase(AgentGroupsActions.fetchAgentGroups.pending, (state) => {\n state.isFetching = true;\n })\n .addCase(AgentGroupsActions.fetchAgentGroups.fulfilled, (state, { payload }) => {\n state.items = payload.items;\n state.pagination = payload.pagination;\n state.isFetching = false;\n })\n .addCase(AgentGroupsActions.fetchAgentGroups.rejected, (state) => {\n state.isFetching = false;\n })\n .addCase(AgentGroupsActions.agentGroupQueryUpdated, (state, { payload }) => {\n state.query = payload.query;\n })\n .addCase(AgentGroupsActions.deleteAgentGroup.pending, (state) => {\n state.isFetching = true;\n })\n .addCase(AgentGroupsActions.deleteAgentGroup.fulfilled, (state) => {\n state.isFetching = false;\n })\n .addCase(AgentGroupsActions.deleteAgentGroup.rejected, (state) => {\n state.isFetching = false;\n })\n .addCase(AgentGroupsActions.agentGroupsReset, () => initialState);\n\n // Other actions\n builder.addCase(AuthenticationActions.unauthenticated, () => initialState);\n});\n","import { snakeCaseKeys } from '@utils/ObjectKeyConverter';\n\nimport DeskApiAxios from './DeskApiAxios';\n\nexport const fetchAssignedTickets: FetchAssignTicketsAPI = (pid, region = '', { id, ...payload }) => {\n const axios = new DeskApiAxios({ pid, region });\n return axios.get(`agents/${id}/assigned_tickets`, { params: payload });\n};\n\nexport const fetchTicketsByCustomer: FetchTicketsByCustomerAPI = (pid, region, { id, ...params }) => {\n const axios = new DeskApiAxios({ pid, region });\n return axios.get(`customers/${id}/tickets/`, { params: snakeCaseKeys(params) });\n};\n\nexport const fetchRecentTicketsByCustomer: FetchRecentTicketsByCustomerAPI = (pid, region, { id, ...params }) => {\n const axios = new DeskApiAxios({ pid, region });\n return axios.get(`customers/${id}/recent_tickets/`, { params: snakeCaseKeys(params) });\n};\n\n// url preview\nexport const fetchURLPreview = ({ pid, region = '', url }) => {\n const axios = new DeskApiAxios({ pid, region });\n return axios.post('utils/url_preview/', { url });\n};\n\nexport const updateTicketAssignment: PatchTicketAssignmentAPI = (pid, region = '', { assignmentId, payload }) => {\n const axios = new DeskApiAxios({ pid, region });\n return axios.patch(`assignments/${assignmentId}/`, payload);\n};\n\nexport const deleteDeskSendbirdMessage: DeleteDeskSendbirdMessageAPI = (pid, region, { ticketId, messageId }) => {\n const axios = new DeskApiAxios({ pid, region });\n return axios.delete(`tickets/${ticketId}/delete_sendbird_message/`, { data: snakeCaseKeys({ messageId }) });\n};\n\nexport const fetchFacebookPage: FetchFacebookPageAPI = (pid, region, { id }) => {\n const axios = new DeskApiAxios({ pid, region });\n return axios.get(`facebook_pages/${id}`);\n};\n\nexport const fetchFacebookMessages: FetchFacebookMessagesAPI = (pid, region, { ticketId, params }) => {\n const axios = new DeskApiAxios({ pid, region });\n return axios.get(`tickets/${ticketId}/facebook_page_messages/?${params}`);\n};\n\nexport const sendFacebookMessage = ({ pid, region = '', ticketId, payload }) => {\n const facebookMessage = new FormData();\n facebookMessage.append('recipientId', payload.recipientId);\n if (payload.messageText) {\n facebookMessage.append('messageText', payload.messageText);\n }\n\n if (payload.filedata) {\n facebookMessage.append('filedata', payload.filedata);\n }\n const axios = new DeskApiAxios({ pid, region });\n return axios.post(`tickets/${ticketId}/facebook_create_message/`, facebookMessage);\n};\n\nexport const fetchFacebookFeeds: FetchFacebookFeedsAPI = (pid, region, { ticketId, params }) => {\n const axios = new DeskApiAxios({ pid, region });\n return axios.get(`tickets/${ticketId}/facebook_page_feeds/?${params}`);\n};\n\nexport const createFacebookFeed = ({ pid, region = '', ticketId, payload }) => {\n const facebookFeed = new FormData();\n if (payload.parentFeedId) {\n facebookFeed.append('parentFeedId', payload.parentFeedId);\n }\n\n if (payload.messageText) {\n facebookFeed.append('messageText', payload.messageText);\n }\n\n if (payload.filedata) {\n facebookFeed.append('filedata', payload.filedata);\n }\n const axios = new DeskApiAxios({ pid, region });\n return axios.post(`tickets/${ticketId}/facebook_create_feed/`, facebookFeed);\n};\n\nexport const editFacebookFeed = ({\n pid,\n region = '',\n payload,\n}: {\n pid: string;\n region: string;\n payload: {\n ticketId: number;\n feedId: string;\n messageText?: string;\n filedata?: any;\n isHidden?: boolean;\n };\n}) => {\n const facebookFeed = new FormData();\n facebookFeed.append('ticketId', String(payload.ticketId));\n if (payload.messageText) {\n facebookFeed.append('messageText', payload.messageText);\n }\n\n if (payload.filedata) {\n facebookFeed.append('filedata', payload.filedata);\n }\n if (typeof payload.isHidden !== 'undefined') {\n facebookFeed.append('isHidden', String(payload.isHidden));\n }\n const axios = new DeskApiAxios({ pid, region });\n return axios.patch(`facebook_page_feeds/${payload.feedId}/`, facebookFeed);\n};\n\nexport const deleteFacebookFeed = ({\n pid,\n region = '',\n ticketId,\n feedId,\n}: {\n pid: string;\n region: string;\n ticketId: number;\n feedId: string;\n}) => {\n const axios = new DeskApiAxios({ pid, region });\n return axios.delete(`facebook_page_feeds/${feedId}/`, { data: { ticketId } });\n};\n\nexport const facebookFeedLike = ({ pid, region = '', ticketId, feedId }) => {\n const axios = new DeskApiAxios({ pid, region });\n return axios.post(`facebook_page_feeds/${feedId}/create_reaction/`, { ticketId });\n};\n\nexport const facebookFeedUnlike = ({ pid, region = '', ticketId, feedId }) => {\n const axios = new DeskApiAxios({ pid, region });\n return axios.delete(`facebook_page_feeds/${feedId}/delete_reaction`, { data: { ticketId } });\n};\n\nexport const markAsRead = ({ pid, region = '', ticketId }) => {\n const axios = new DeskApiAxios({ pid, region });\n return axios.post(`tickets/${ticketId}/mark_as_read/`, {});\n};\n\nexport const fetchTwitterDirectMessageEvents: FetchTwitterDirectMessageEventsAPI = (\n pid,\n region = '',\n { ticketId, params },\n) => {\n const axios = new DeskApiAxios({ pid, region });\n return axios.get(`tickets/${ticketId}/twitter_direct_message_events/`, { params });\n};\n\nexport const createTwitterDirectMessageEvent: CreateTwitterDirectMessageEventAPI = (\n pid,\n region = '',\n { ticketId, recipientId, messageText, mediaId },\n) => {\n const axios = new DeskApiAxios({ pid, region });\n return axios.post(`tickets/${ticketId}/twitter_create_direct_message_event/`, { recipientId, messageText, mediaId });\n};\n\nexport const patchTwitterDirectMessageEvent: PatchTwitterDirectMessageEventAPI = (pid, region = '', { id, status }) => {\n const axios = new DeskApiAxios({ pid, region });\n return axios.patch(`twitter_direct_message_events/${id}/`, { status });\n};\n\nexport const fetchTwitterStatuses: FetchTwitterStatusesAPI = (pid, region = '', { ticketId, params }) => {\n const axios = new DeskApiAxios({ pid, region });\n return axios.get(`tickets/${ticketId}/twitter_statuses/`, { params });\n};\n\nexport const createTwitterStatus: CreateTwitterStatusAPI = (\n pid,\n region = '',\n { ticketId, recipientId, messageText, inReplyToStatusId, mediaIds },\n) => {\n const axios = new DeskApiAxios({ pid, region });\n return axios.post(`tickets/${ticketId}/twitter_create_status/`, {\n recipientId,\n messageText,\n inReplyToStatusId,\n mediaIds: mediaIds && mediaIds.join(','),\n });\n};\n\nexport const patchTwitterStatusStatus: PatchTwitterStatusStatusAPI = (pid, region = '', { id, status }) => {\n const axios = new DeskApiAxios({ pid, region });\n return axios.patch(`twitter_statuses/${id}/status/`, { status });\n};\n\nexport const patchTwitterStatusRetweeted: PatchTwitterStatusRetweetedAPI = (pid, region = '', { id, retweeted }) => {\n const axios = new DeskApiAxios({ pid, region });\n return axios.patch(`twitter_status_twitter_users/${id}/retweeted/`, { retweeted });\n};\n\nexport const patchTwitterStatusFavorited: PatchTwitterStatusFavoritedAPI = (pid, region = '', { id, favorited }) => {\n const axios = new DeskApiAxios({ pid, region });\n return axios.patch(`twitter_status_twitter_users/${id}/favorited/`, { favorited });\n};\n\nexport const fetchInstagramComments: FetchInstagramCommentsAPI = (pid, region = '', { ticketId, params }) => {\n const axios = new DeskApiAxios({ pid, region });\n return axios.get(`tickets/${ticketId}/instagram_comment_tickets/`, { params });\n};\n\nexport const createInstagramComment: CreateInstagramCommentAPI = (\n pid,\n region = '',\n { ticketId, igMediaId, parentIgCommentId, text },\n) => {\n const axios = new DeskApiAxios({ pid, region });\n return axios.post(`tickets/${ticketId}/instagram_create_comment/`, { igMediaId, parentIgCommentId, text });\n};\n\nexport const deleteInstagramComment: DeleteInstagramCommentAPI = (\n pid,\n region = '',\n { ticketId, instagramCommentId },\n) => {\n const axios = new DeskApiAxios({ pid, region });\n return axios.patch(`instagram_comments/${instagramCommentId}/delete_comment/`, { ticketId });\n};\n\nexport const fetchInstagramMessages: FetchInstagramMessagesAPI = (pid, region = '', { ticketId, params }) => {\n const axios = new DeskApiAxios({ pid, region });\n return axios.get(`tickets/${ticketId}/instagram_messages/`, { params });\n};\n\nexport const createInstagramMessage: CreateInstagramMessageAPI = (pid, region = '', { ticketId, text, media }) => {\n const payload = new FormData();\n text.trim() && payload.append('text', text.trim());\n media && payload.append('media', media);\n const axios = new DeskApiAxios({ pid, region });\n return axios.post(`tickets/${ticketId}/instagram_create_message/`, payload);\n};\n\nexport const fetchWhatsAppMessages: FetchWhatsAppMessagesAPI = (pid, region, { ticketId, params }) => {\n const axios = new DeskApiAxios({ pid, region });\n return axios.get(`tickets/${ticketId}/nexmo_whatsapp_messages`, { params: snakeCaseKeys(params) });\n};\n\nexport const createWhatsAppMessage: CreateWhatsAppMessageAPI = (\n pid,\n region,\n { ticketId, toNumber, messageText, filedata },\n) => {\n const payload = new FormData();\n payload.append('toNumber', toNumber);\n messageText && payload.append('messageText', messageText);\n filedata && payload.append('filedata', filedata);\n\n const axios = new DeskApiAxios({ pid, region });\n return axios.post(`tickets/${ticketId}/nexmo_create_whatsapp_message`, payload, {\n headers: {\n ...(filedata ? { 'content-type': 'multipart/form-data' } : {}),\n },\n });\n};\n\nexport const fetchWhatsAppMedia: FetchWhatsAppMediaAPI = (pid, region, messageId) => {\n const axios = new DeskApiAxios({ pid, region });\n return axios.get(`nexmo_whatsapp_messages/${messageId}/get_media_url/`);\n};\n\nexport const fetchAgentTicketCounts: FetchConversationTicketCountsAPI = (pid, region, { agentId }) => {\n const axios = new DeskApiAxios({ pid, region });\n return axios.get(`agents/${agentId}/ticket_counts/`);\n};\n","import { snakeCaseKeys } from '@utils/ObjectKeyConverter';\n\nimport DeskApiAxios from './DeskApiAxios';\n\nexport const fetchTicketMessages: FetchTicketMessagesAPI = (pid, region, payload) => {\n const axios = new DeskApiAxios({ pid, region });\n return axios.get(`tickets/${payload.ticketId}/messages/`, {\n params: { ...snakeCaseKeys(payload) },\n });\n};\n","import DeskApiAxios from './DeskApiAxios';\n\nexport const fetchTickets: FetchTicketsAPI = (pid, region = '', params) => {\n const axios = new DeskApiAxios({ pid, region });\n return axios.get('projects/tickets/', { params });\n};\n\nexport const searchTickets: SearchTicketsAPI = (pid, region = '', params) => {\n const axios = new DeskApiAxios({ pid, region });\n return axios.get('projects/ticket_search/', { params });\n};\n\nexport const fetchTicket: FetchTicketAPI = (pid, region = '', { ticketId }) => {\n const axios = new DeskApiAxios({ pid, region });\n return axios.get(`tickets/${ticketId}/`);\n};\n\nexport const updateTicket: UpdateTicketAPI = (pid, region = '', { ticketId, params }) => {\n const axios = new DeskApiAxios({ pid, region });\n return axios.patch(`tickets/${ticketId}`, params, {});\n};\n\nexport const transferTicket: TransferTicketAPI = (pid, region = '', { payload }) => {\n const axios = new DeskApiAxios({ pid, region });\n return axios.post('transfers/', payload, {});\n};\n\nexport const closeTicket: CloseTicketAPI = (pid, region = '', { ticketId, closeComment }) => {\n const axios = new DeskApiAxios({ pid, region });\n return axios.patch(`tickets/${ticketId}/close/`, { closeComment });\n};\n\nexport const forceAssignTicket: ForceAssignTicketAPI = (pid, region = '', { ticketId, agentId }) => {\n const axios = new DeskApiAxios({ pid, region });\n return axios.patch(`tickets/${ticketId}/force_assign/`, { agent: agentId });\n};\n\nexport const fetchTicketsCounts: FetchTicketsCountsAPI = (pid, region = '') => {\n const axios = new DeskApiAxios({ pid, region });\n return axios.get(`projects/${pid}/ticket_counts/`);\n};\n\nexport const addToWIP: AddToWIPAPI = (pid, region = '', { ticketId }) => {\n const axios = new DeskApiAxios({ pid, region });\n return axios.patch(`tickets/${ticketId}/add_to_wip/`, {});\n};\n\nexport const assignTicket: AssignTicketAPI = (pid, region = '', { ticketId }) => {\n const axios = new DeskApiAxios({ pid, region });\n return axios.patch(`tickets/${ticketId}/assign/`, {});\n};\n\nexport const reopenTicket: ReopenTicketAPI = (pid, region = '', { ticketId }) => {\n const axios = new DeskApiAxios({ pid, region });\n return axios.patch(`tickets/${ticketId}/reopen/`, {});\n};\n\nexport const assignTicketToAgentGroup: AssignTicketToAgentGroupAPI = (pid, region = '', { ticketId, groupId }) => {\n const axios = new DeskApiAxios({ pid, region });\n return axios.patch(`tickets/${ticketId}/assign_group/`, { group_id: groupId });\n};\n\nexport const addTag: AddTagAPI = (pid, region = '', { ticketId, tagId }) => {\n const axios = new DeskApiAxios({ pid, region });\n return axios.post(`tickets/${ticketId}/add_tag/`, { tag: tagId }, { headers: { pid } });\n};\n\nexport const removeTag: RemoveTagAPI = (pid, region = '', { ticketId, tagId }) => {\n const axios = new DeskApiAxios({ pid, region });\n return axios.delete(`tickets/${ticketId}/delete_tag/`, { data: { tag: tagId } });\n};\n\nexport const deskCallsDial: DeskCallsDialAPI = (pid, region = '', { ticketId, callId }) => {\n const axios = new DeskApiAxios({ pid, region });\n return axios.post(`tickets/${ticketId}/call_dial/`, { call_id: callId });\n};\n\nexport const deskCallsEnd: DeskCallsEndAPI = (pid, region = '', { ticketId, callId }) => {\n const axios = new DeskApiAxios({ pid, region });\n return axios.post(`tickets/${ticketId}/call_end/`, { call_id: callId });\n};\n","'use strict'\n\nconst HIGH_SURROGATE_START = 0xd800\nconst HIGH_SURROGATE_END = 0xdbff\n\nconst LOW_SURROGATE_START = 0xdc00\n\nconst REGIONAL_INDICATOR_START = 0x1f1e6\nconst REGIONAL_INDICATOR_END = 0x1f1ff\n\nconst FITZPATRICK_MODIFIER_START = 0x1f3fb\nconst FITZPATRICK_MODIFIER_END = 0x1f3ff\n\nconst VARIATION_MODIFIER_START = 0xfe00\nconst VARIATION_MODIFIER_END = 0xfe0f\n\nconst DIACRITICAL_MARKS_START = 0x20d0\nconst DIACRITICAL_MARKS_END = 0x20ff\n\nconst ZWJ = 0x200d\n\nconst GRAPHEMS = [\n 0x0308, // ( ◌̈ ) COMBINING DIAERESIS\n 0x0937, // ( ष ) DEVANAGARI LETTER SSA\n 0x0937, // ( ष ) DEVANAGARI LETTER SSA\n 0x093F, // ( ि ) DEVANAGARI VOWEL SIGN I\n 0x093F, // ( ि ) DEVANAGARI VOWEL SIGN I\n 0x0BA8, // ( ந ) TAMIL LETTER NA\n 0x0BBF, // ( ி ) TAMIL VOWEL SIGN I\n 0x0BCD, // ( ◌்) TAMIL SIGN VIRAMA\n 0x0E31, // ( ◌ั ) THAI CHARACTER MAI HAN-AKAT\n 0x0E33, // ( ำ ) THAI CHARACTER SARA AM\n 0x0E40, // ( เ ) THAI CHARACTER SARA E\n 0x0E49, // ( เ ) THAI CHARACTER MAI THO\n 0x1100, // ( ᄀ ) HANGUL CHOSEONG KIYEOK\n 0x1161, // ( ᅡ ) HANGUL JUNGSEONG A\n 0x11A8 // ( ᆨ ) HANGUL JONGSEONG KIYEOK\n]\n\nfunction runes (string) {\n if (typeof string !== 'string') {\n throw new Error('string cannot be undefined or null')\n }\n const result = []\n let i = 0\n let increment = 0\n while (i < string.length) {\n increment += nextUnits(i + increment, string)\n if (isGraphem(string[i + increment])) {\n increment++\n }\n if (isVariationSelector(string[i + increment])) {\n increment++\n }\n if (isDiacriticalMark(string[i + increment])) {\n increment++\n }\n if (isZeroWidthJoiner(string[i + increment])) {\n increment++\n continue\n }\n result.push(string.substring(i, i + increment))\n i += increment\n increment = 0\n }\n return result\n}\n\n// Decide how many code units make up the current character.\n// BMP characters: 1 code unit\n// Non-BMP characters (represented by surrogate pairs): 2 code units\n// Emoji with skin-tone modifiers: 4 code units (2 code points)\n// Country flags: 4 code units (2 code points)\n// Variations: 2 code units\nfunction nextUnits (i, string) {\n const current = string[i]\n // If we don't have a value that is part of a surrogate pair, or we're at\n // the end, only take the value at i\n if (!isFirstOfSurrogatePair(current) || i === string.length - 1) {\n return 1\n }\n\n const currentPair = current + string[i + 1]\n let nextPair = string.substring(i + 2, i + 5)\n\n // Country flags are comprised of two regional indicator symbols,\n // each represented by a surrogate pair.\n // See http://emojipedia.org/flags/\n // If both pairs are regional indicator symbols, take 4\n if (isRegionalIndicator(currentPair) && isRegionalIndicator(nextPair)) {\n return 4\n }\n\n // If the next pair make a Fitzpatrick skin tone\n // modifier, take 4\n // See http://emojipedia.org/modifiers/\n // Technically, only some code points are meant to be\n // combined with the skin tone modifiers. This function\n // does not check the current pair to see if it is\n // one of them.\n if (isFitzpatrickModifier(nextPair)) {\n return 4\n }\n return 2\n}\n\nfunction isFirstOfSurrogatePair (string) {\n return string && betweenInclusive(string[0].charCodeAt(0), HIGH_SURROGATE_START, HIGH_SURROGATE_END)\n}\n\nfunction isRegionalIndicator (string) {\n return betweenInclusive(codePointFromSurrogatePair(string), REGIONAL_INDICATOR_START, REGIONAL_INDICATOR_END)\n}\n\nfunction isFitzpatrickModifier (string) {\n return betweenInclusive(codePointFromSurrogatePair(string), FITZPATRICK_MODIFIER_START, FITZPATRICK_MODIFIER_END)\n}\n\nfunction isVariationSelector (string) {\n return typeof string === 'string' && betweenInclusive(string.charCodeAt(0), VARIATION_MODIFIER_START, VARIATION_MODIFIER_END)\n}\n\nfunction isDiacriticalMark (string) {\n return typeof string === 'string' && betweenInclusive(string.charCodeAt(0), DIACRITICAL_MARKS_START, DIACRITICAL_MARKS_END)\n}\n\nfunction isGraphem (string) {\n return typeof string === 'string' && GRAPHEMS.indexOf(string.charCodeAt(0)) !== -1\n}\n\nfunction isZeroWidthJoiner (string) {\n return typeof string === 'string' && string.charCodeAt(0) === ZWJ\n}\n\nfunction codePointFromSurrogatePair (pair) {\n const highOffset = pair.charCodeAt(0) - HIGH_SURROGATE_START\n const lowOffset = pair.charCodeAt(1) - LOW_SURROGATE_START\n return (highOffset << 10) + lowOffset + 0x10000\n}\n\nfunction betweenInclusive (value, lower, upper) {\n return value >= lower && value <= upper\n}\n\nfunction substring (string, start, width) {\n const chars = runes(string)\n if (start === undefined) {\n return string\n }\n if (start >= chars.length) {\n return ''\n }\n const rest = chars.length - start\n const stringWidth = width === undefined ? rest : width\n let endIndex = start + stringWidth\n if (endIndex > (start + rest)) {\n endIndex = undefined\n }\n return chars.slice(start, endIndex).join('')\n}\n\nmodule.exports = runes\nmodule.exports.substr = substring\n","import type { ReactNode } from 'react';\n\nconst convertNodeArrayToReactFragment = (nodeArray: readonly ReactNode[]) =>\n nodeArray.reduce(\n (acc, cur) => (\n <>\n {acc}\n {cur}\n \n ),\n null,\n );\n\nexport default convertNodeArrayToReactFragment;\n","export default function getExtension(path: string) {\n // extract file name from full path ... (supports `\\\\` and `/` separators)\n const basename = path.split(/[\\\\/]/).pop() || '';\n\n // get last position of `.`\n const pos = basename.lastIndexOf('.');\n\n if (basename === '' || pos < 1)\n // if file name is empty or ...\n return ''; // `.` not found (-1) or comes first (0)\n\n return basename.slice(pos + 1); // extract extension ignoring `.`\n}\n","export default function guessTimezone() {\n return Intl.DateTimeFormat().resolvedOptions().timeZone;\n}\n","import React from 'react';\n\nimport { parseAbsolute, toCalendarDate } from '@internationalized/date';\nimport type { AdminMessage, BaseMessage, FileMessage, UserMessage } from '@sendbird/chat/message';\nimport { MessageType } from '@sendbird/chat/message';\nimport compareAsc from 'date-fns/compareAsc';\n\nimport { EMAIL_PARSE_REGEX, URL_PARSE_REGEX } from '@constants';\n\nimport convertNodeArrayToReactFragment from './convertNodeArrayToReactFragment';\nimport getExtension from './getExtension';\nimport guessTimezone from './guessTimezone';\n\nconst CMD_MESG = 'MESG';\nconst CMD_FILE = 'FILE';\nconst CMD_ADMM = 'ADMM';\nconst CMD_BRDM = 'BRDM';\n\nexport const getBaseMessageTypeFromPlatformAPIMessage = (\n message: Pick,\n): MessageType => {\n return {\n [CMD_FILE]: MessageType.FILE,\n [CMD_ADMM]: MessageType.ADMIN,\n [CMD_BRDM]: MessageType.ADMIN,\n [CMD_MESG]: MessageType.USER,\n }[message.type];\n};\n\nexport const sdkMessageTypeChecker = {\n isUserMessage: (message: Pick): message is UserMessage => {\n return message.messageType === MessageType.USER;\n },\n isFileMessage: (message: Pick): message is FileMessage => {\n return message.messageType === MessageType.FILE;\n },\n isAdminMessage: (message: Pick): message is AdminMessage => {\n return message.messageType === MessageType.ADMIN;\n },\n};\n\nexport const shouldRenderImage = (\n type: NonNullable['type'],\n url: string | null,\n): boolean => {\n if (!url) {\n // it prevent `url` null runtime error\n return false;\n }\n const fileExtension = getExtension(url);\n\n const imageExtensions = [\n 'bmp',\n 'cod',\n 'gif',\n 'ief',\n 'jpe',\n 'jpeg',\n 'jpg',\n 'jfif',\n 'svg',\n 'tif',\n 'tiff',\n 'ras',\n 'cmx',\n 'ico',\n 'pnm',\n 'pbm',\n 'pgm',\n 'ppm',\n 'rgb',\n 'xbm',\n 'xpm',\n 'xwd',\n 'png',\n ];\n\n return (\n !!type?.match(/^image.+$/i) || (type === 'application/octet-stream' && imageExtensions.includes(fileExtension))\n );\n};\n\n/**\n * Check whether a dateline must be rendered between two dates.\n *\n * @param previousDate UNIX timestamp or ISO String of the former message\n * @param nextDate UNIX timestamp or ISO String of the latter message\n * @param timeZone Time zone the dates are displayed in\n */\nexport function shouldRenderDateLine({\n previousDate,\n nextDate,\n timeZone = guessTimezone(),\n}: {\n previousDate: number | string;\n nextDate: number | string;\n timeZone?: string;\n}) {\n try {\n const prev = parseAbsolute(new Date(previousDate).toISOString(), timeZone);\n const next = parseAbsolute(new Date(nextDate).toISOString(), timeZone);\n return toCalendarDate(prev).compare(toCalendarDate(next)) < 0;\n } catch {\n return false;\n }\n}\n\nconst convertURLToLink = (token: string): React.ReactNode =>\n token.match(URL_PARSE_REGEX) ? (\n \n {token}\n \n ) : (\n token\n );\n\nconst convertEmailToLink = (token: string) =>\n token.match(EMAIL_PARSE_REGEX) ? {token} : token;\n\nexport const convertURLsAndEmailsToLinks = (message: string) => {\n if (!message) {\n return null;\n }\n if (!message.match(URL_PARSE_REGEX)) {\n // no URLs or emails found from the message\n return message;\n }\n\n return convertNodeArrayToReactFragment(\n message\n .split(new RegExp(`(${URL_PARSE_REGEX.source})`)) // add parentheses to capture delimiters (URLs)\n .map(convertURLToLink)\n .map((token) => {\n if (typeof token !== 'string') {\n return token;\n }\n return convertNodeArrayToReactFragment(\n token\n .split(new RegExp(`(${EMAIL_PARSE_REGEX.source})`)) // add parentheses to capture delimiters (emails)\n .map(convertEmailToLink),\n );\n }),\n );\n};\n\nexport const convertMessageWithCustomRule = (\n message: string,\n customRule: { regex: RegExp; converter: (token: string) => React.ReactNode },\n) => {\n if (!message) {\n return null;\n }\n\n const convertedEmailToLink = message\n .split(new RegExp(`(${EMAIL_PARSE_REGEX.source})`)) // add parentheses to capture delimiters (URLs)\n .map(convertEmailToLink);\n\n let convertedByCustomRule: React.ReactNode[] = [];\n convertedEmailToLink.forEach((token) => {\n if (typeof token === 'string') {\n convertedByCustomRule = convertedByCustomRule.concat(token.split(customRule.regex).map(customRule.converter));\n } else {\n convertedByCustomRule.push(token);\n }\n });\n\n return convertNodeArrayToReactFragment(\n convertedByCustomRule.map((token) => {\n if (typeof token !== 'string') {\n return token;\n }\n return convertNodeArrayToReactFragment(\n token\n .split(new RegExp(`(${URL_PARSE_REGEX.source})`)) // add parentheses to capture delimiters (emails)\n .map(convertURLToLink),\n );\n }),\n );\n};\n\nexport const isTicketNoteMessage = (\n message: TicketMessage | ProactiveChatMessage | TicketNote | SendbirdChatMessage.SendableMessageWithIsRemoved,\n): message is TicketNote => 'note' in message;\n\nexport const convertToRichTicketNote = (ticketNote: TicketNote): RichTicketNote => ({\n ...ticketNote,\n sender: { userId: String(ticketNote.createdBy?.id ?? ''), nickname: ticketNote.createdBy?.displayName ?? '' },\n messageType: 'note',\n isRemoved: false,\n});\n\nexport const getCreatedAtFromMessage = (message: TicketMessage | ProactiveChatMessage | TicketNote) => {\n if (isTicketNoteMessage(message)) {\n return message.createdAt;\n }\n if ('timestamp' in message) {\n return message.timestamp;\n }\n if ('instagramComment' in message) {\n return message.instagramComment.timestamp;\n }\n return message.createdAt;\n};\n\nexport const mergeTicketNotesAndMessages = <\n TMessage extends TicketMessage | ProactiveChatMessage,\n TTicketNote extends TicketNote | RichTicketNote,\n>(\n messages: TMessage[],\n ticketNotes: TTicketNote[],\n) =>\n [...messages, ...ticketNotes].sort((a, b) =>\n compareAsc(new Date(getCreatedAtFromMessage(a)), new Date(getCreatedAtFromMessage(b))),\n );\n","import React from 'react';\n\nimport runes from 'runes';\n\nimport type { ImagePreviewActions } from '@common/redux/actions/imagePreview';\nimport type { ImageFile, VideoFile } from '@desk/components/chatBubble/fileInterfaces';\nimport { safeParseJSON } from '@utils';\nimport convertNodeArrayToReactFragment from '@utils/convertNodeArrayToReactFragment';\nimport { convertURLsAndEmailsToLinks } from '@utils/messages';\n\nexport const getTwitterStatusURL = ({ screenName = 'user', statusId }: { screenName?: string; statusId: string }) =>\n /**\n * If you put any string such as `user` in the place of screenName, it will be redirected to the correct URL by\n * Twitter as long as a correct statusId is given.\n */\n `https://twitter.com/${screenName}/status/${statusId}`;\n\nexport const parseTextAndFilesFromTwitterStatus = (parameters: {\n text: string;\n entities: TwitterEntities | null;\n extendedEntities?: EntityParsedTwitterStatus['extendedEntities'];\n showImagePreviewRequest?: ((...args: Parameters) => void) | false;\n quotedStatusPermalink: string | null;\n}) => {\n const { text, entities, extendedEntities, showImagePreviewRequest, quotedStatusPermalink } = parameters;\n const mergedEntities = Object.entries(entities || {})\n .reduce<\n {\n entityType: 'hashtags' | 'urls' | 'user_mentions' | 'media' | 'symbols';\n indices: readonly [number, number];\n [key: string]: any;\n }[]\n >((acc, [entityType, entityList]) => {\n if (entityType !== 'media') {\n // media entities are included in extendedEntities.\n acc.push(...(entityList as any[]).map((entity) => ({ entityType, ...entity })));\n }\n return acc;\n }, [])\n .concat(((extendedEntities && extendedEntities.media) || []).map((entity) => ({ entityType: 'media', ...entity })));\n\n // Sort entities based on indices in a descending order to replace substrings from the end\n mergedEntities.sort((a, b) => b.indices[0] - a.indices[0]);\n\n const onAttachmentPhotoClick = async (mediaURL: string) => {\n showImagePreviewRequest && showImagePreviewRequest([{ name: '', url: mediaURL }]);\n };\n\n let prefixText = text;\n const textNodes: React.ReactNode[] = [];\n const files: (ImageFile | VideoFile)[] = [];\n\n mergedEntities.forEach((entity) => {\n const { entityType, indices } = entity;\n const [startIndex, endIndex] = indices;\n const [predecessor, target, successor] = [\n runes(prefixText).slice(0, startIndex).join(''),\n runes(prefixText).slice(startIndex, endIndex).join(''),\n runes(prefixText).slice(endIndex).join(''),\n ];\n\n prefixText = predecessor;\n switch (entityType) {\n case 'hashtags':\n case 'symbols': {\n try {\n textNodes.unshift(\n \n {target}\n ,\n successor,\n );\n } catch (err) {\n // skip\n }\n\n break;\n }\n case 'urls': {\n const { url, expanded_url, display_url } = entity as unknown as TwitterURLEntity;\n if (expanded_url === quotedStatusPermalink) {\n // Quoted status will be displayed as SocialMediaPostBubble. So just remove the URL from the text.\n break;\n }\n textNodes.unshift(\n \n {display_url}\n ,\n successor,\n );\n break;\n }\n case 'user_mentions': {\n const { id_str, screen_name } = entity as unknown as TwitterUserMentionEntity;\n textNodes.unshift(\n \n {target}\n ,\n successor,\n );\n break;\n }\n case 'media': {\n const { type } = entity as unknown as TwitterMediaObject;\n switch (type) {\n case 'photo': {\n const {\n media_url_https,\n sizes: {\n medium: { w: width, h: height },\n },\n } = entity as unknown as TwitterMediaObject;\n\n files.push({\n type: 'image' as const,\n url: media_url_https,\n dimension: { width, height },\n onClick: () => onAttachmentPhotoClick(media_url_https),\n });\n break;\n }\n case 'animated_gif':\n case 'video': {\n const {\n video_info: { aspect_ratio, variants },\n } = entity as unknown as TwitterMediaVideoObject;\n const [x, y] = aspect_ratio;\n\n // The browser will use the first source it understands. We want the variant with the highest bitrate to be used if possible.\n const sortedByBitrateDescVariants = [...variants]\n .sort((a, b) => (b.bitrate || 0) - (a.bitrate || 0))\n .map(({ content_type: contentType, ...variant }) => ({ ...variant, contentType }));\n\n files.push({\n type: type === 'animated_gif' ? ('twitter-gif' as const) : ('video' as const),\n aspectRatio: { x, y },\n sources: sortedByBitrateDescVariants,\n });\n break;\n }\n default:\n break;\n }\n break;\n }\n default:\n break;\n }\n });\n\n const displayedText =\n prefixText || textNodes.length > 0 ? (\n <>\n {convertURLsAndEmailsToLinks(prefixText)}\n {convertNodeArrayToReactFragment(\n textNodes.map((node) => (typeof node === 'string' ? convertURLsAndEmailsToLinks(node) : node)),\n )}\n \n ) : null;\n\n return { displayedText, files };\n};\n\nconst parseTwitterStatusEntities = (twitterStatus: TwitterStatus): EntityParsedTwitterStatus => ({\n ...twitterStatus,\n entities: safeParseJSON(twitterStatus.entities),\n extendedEntities: safeParseJSON(twitterStatus.extendedEntities),\n});\n\nexport const convertTwitterStatusTicketToMergedTwitterStatus = (\n twitterStatusTicket: TwitterStatusTicket,\n): MergedTwitterStatus => {\n const { twitterStatus, agent, ticket, recipientId, id, twitterStatusTwitterUser } = twitterStatusTicket;\n const {\n id: twitterStatusTwitterUserId = null,\n retweeted = false,\n favorited = false,\n twitterUser = null,\n } = twitterStatusTwitterUser || {};\n return {\n ...parseTwitterStatusEntities(twitterStatus),\n agent,\n favorited,\n recipientId,\n retweeted,\n retweetedFavoritedBy: twitterUser,\n ticket,\n twitterStatusTwitterUserId,\n twitterStatusTicketId: id,\n };\n};\n\nexport const parseTwitterDirectMessageEventAttachments = (\n message: TwitterDirectMessageEvent,\n): AttachmentParsedTwitterDirectMessageEvent => ({\n ...message,\n attachment: safeParseJSON(message.attachment),\n});\n","import { createAction } from '@reduxjs/toolkit';\nimport axios from 'axios';\n\nimport createAsyncThunk from '@/redux/createAsyncThunk';\nimport type { FacebookVerb } from '@constants';\nimport { selectApplicationData } from '@core/redux/selectors/applicationState';\nimport {\n createFacebookFeed,\n createInstagramComment,\n createInstagramMessage,\n createTwitterDirectMessageEvent,\n createTwitterStatus,\n createWhatsAppMessage,\n deleteFacebookFeed,\n deleteInstagramComment,\n editFacebookFeed,\n facebookFeedLike,\n facebookFeedUnlike,\n fetchFacebookFeeds,\n fetchFacebookMessages,\n fetchInstagramComments,\n fetchInstagramMessages,\n fetchTwitterDirectMessageEvents,\n fetchTwitterStatuses,\n fetchURLPreview,\n fetchWhatsAppMessages,\n markAsRead,\n patchTwitterDirectMessageEvent,\n patchTwitterStatusFavorited,\n patchTwitterStatusRetweeted,\n patchTwitterStatusStatus,\n sendFacebookMessage,\n updateTicketAssignment,\n} from '@desk/api/conversation';\nimport { fetchTicketMessages } from '@desk/api/ticketDetail';\nimport { assignTicket, fetchTicket } from '@desk/api/tickets';\nimport {\n convertTwitterStatusTicketToMergedTwitterStatus,\n parseTwitterDirectMessageEventAttachments,\n} from '@desk/utils/twitterUtils';\nimport { toast } from '@feather/components/notification';\nimport getErrorMessage from '@utils/getErrorMessage';\nimport logException from '@utils/logException';\nimport toastBadRequestWarning from '@utils/toastBadRequestWarning';\n\nimport type { ConversationState } from '../reducers/conversation';\nimport { selectDeskProject } from '../selectors/desk';\n\ntype FetchConversationMessagesType = 'initial' | 'prev' | 'next';\ntype FacebookFeedResponsePayload = { feed: FacebookFeedType };\ninterface FacebookFeedSimpleActionRequestPayload {\n ticketId: Ticket['id'];\n feed: FacebookFeedType;\n}\ninterface FetchSocialMessagesRequestPayload {\n types: FetchConversationMessagesType;\n ticketId: Ticket['id'];\n nextLimit?: number;\n prevLimit?: number;\n ts: number;\n initial?: boolean;\n}\n\nexport const ConversationActions = {\n fetchConversation: createAsyncThunk(\n 'desk/conversation/fetchConversation',\n async (payload, { dispatch, getState, rejectWithValue }) => {\n const { region } = selectApplicationData(getState());\n const { pid } = selectDeskProject(getState());\n\n try {\n const { data } = await fetchTicket(pid, region, { ticketId: payload.ticketId });\n\n dispatch(ConversationActions.conversationFetched(data));\n return data;\n } catch (error) {\n if (axios.isAxiosError(error)) {\n toastBadRequestWarning(error);\n return rejectWithValue(error || '');\n }\n\n logException(error);\n return rejectWithValue(error);\n }\n },\n ),\n conversationFetched: createAction('desk/conversation/conversationFetched'),\n\n fetchConversationMessages: createAsyncThunk<\n {\n types: FetchConversationMessagesType;\n messages: SendbirdChatPlatformAPI.AllMessageType[];\n initialOrNextFetchedTimestamp?: number;\n },\n {\n types: FetchConversationMessagesType;\n ticketId: Ticket['id'];\n messageTs: number;\n prevLimit: number;\n nextLimit: number;\n }\n >('desk/conversation/fetchConversationMessages', async (payload, { getState, rejectWithValue }) => {\n const { region } = selectApplicationData(getState());\n const { pid } = selectDeskProject(getState());\n\n try {\n const { data } = await fetchTicketMessages(pid, region, {\n ticketId: payload.ticketId,\n messageTs: payload.messageTs,\n prevLimit: payload.prevLimit,\n nextLimit: payload.nextLimit,\n });\n\n const currentMessages = getState().conversation.messages as SendbirdChatPlatformAPI.AllMessageType[];\n if (payload.types === 'prev') {\n return {\n types: payload.types,\n messages: data.messages.concat(currentMessages),\n };\n }\n if (payload.types === 'next') {\n return {\n types: payload.types,\n messages: data.messages.length > 0 ? currentMessages.concat(data.messages) : currentMessages,\n initialOrNextFetchedTimestamp: data.messages.length > 0 ? Date.now() : undefined,\n };\n }\n return {\n types: payload.types,\n messages: data.messages,\n };\n } catch (error) {\n if (axios.isAxiosError(error)) {\n toastBadRequestWarning(error);\n return rejectWithValue(error || '');\n }\n\n logException(error);\n return rejectWithValue(error);\n }\n }),\n\n conversationTicketMessageUpdated: createAction<{\n messageId: number;\n updated: Partial;\n }>('desk/conversation/conversationTicketMessageUpdated'),\n\n updateConversationTicketAssignment: createAsyncThunk(\n 'desk/conversation/updateConversationTicketAssignment',\n async (payload, { dispatch, getState, rejectWithValue }) => {\n const { region } = selectApplicationData(getState());\n const { pid } = selectDeskProject(getState());\n\n try {\n const { data } = await updateTicketAssignment(pid, region, payload);\n\n dispatch(ConversationActions.conversationAssignmentSet(data));\n return data;\n } catch (error) {\n if (axios.isAxiosError(error)) {\n toastBadRequestWarning(error);\n return rejectWithValue(error || '');\n }\n\n logException(error);\n return rejectWithValue(error);\n }\n },\n ),\n /**\n * Update ticket assignment via API\n */\n conversationAssignmentSet: createAction('desk/conversation/conversationAssignmentSet'),\n\n conversationReset: createAction('desk/conversation/conversationReset'),\n conversationMessagesReset: createAction('desk/conversation/conversationMessagesReset'),\n\n // URL Preview\n fetchURLPreview: createAsyncThunk<\n { url: string; siteName: string; title: string; description: string; image: string },\n { url: string }\n >('desk/conversation/fetchURLPreview', async (payload, { getState, rejectWithValue }) => {\n const { region } = selectApplicationData(getState());\n const { pid } = selectDeskProject(getState());\n\n try {\n const { data } = await fetchURLPreview({ pid, region, url: payload.url });\n\n return data;\n } catch (error) {\n if (axios.isAxiosError(error)) {\n toastBadRequestWarning(error);\n return rejectWithValue(error || '');\n }\n\n logException(error);\n return rejectWithValue(error);\n }\n }),\n\n // assign ticket to myself\n assignTicketToMyself: createAsyncThunk(\n 'desk/conversation/assignTicketToMyself',\n async (payload, { dispatch, getState, rejectWithValue }) => {\n const { region } = selectApplicationData(getState());\n const { pid } = selectDeskProject(getState());\n\n try {\n await assignTicket(pid, region, payload);\n\n dispatch(ConversationActions.fetchConversation(payload));\n } catch (error) {\n if (axios.isAxiosError(error)) {\n toastBadRequestWarning(error);\n return rejectWithValue(error || '');\n }\n\n logException(error);\n return rejectWithValue(error);\n }\n },\n ),\n\n markAsRead: createAsyncThunk<{ ticket: Ticket }, { ticketId: Ticket['id'] }>(\n 'desk/conversation/markAsRead',\n async (payload, { getState, rejectWithValue }) => {\n const { region } = selectApplicationData(getState());\n const { pid } = selectDeskProject(getState());\n\n try {\n const { data } = await markAsRead({ pid, region, ticketId: payload.ticketId });\n\n return { ticket: data };\n } catch (error) {\n if (axios.isAxiosError(error)) {\n toastBadRequestWarning(error);\n return rejectWithValue(error || '');\n }\n\n logException(error);\n return rejectWithValue(error);\n }\n },\n ),\n\n typingStatusSet: createAction('desk/conversation/typingStatusSet'),\n agentTypingStatusSet: createAction('desk/conversation/agentTypingStatusSet'),\n othersTypingStatusSet: createAction>(\n 'desk/conversation/othersTypingStatusSet',\n ),\n\n /**\n * Social\n */\n\n // facebook - message\n fetchFacebookMessages: createAsyncThunk<\n {\n types: FetchConversationMessagesType;\n facebookMessages: FacebookPageMessage[];\n initialOrNextFetchedTimestamp?: number;\n },\n FetchSocialMessagesRequestPayload\n >('desk/conversation/fetchFacebookMessages', async (payload, { getState, rejectWithValue }) => {\n const { region } = selectApplicationData(getState());\n const { pid } = selectDeskProject(getState());\n const { ts, prevLimit = 0, nextLimit = 0 } = payload;\n const params = `prevLimit=${prevLimit}&nextLimit=${nextLimit}&ts=${ts}`;\n\n try {\n const { data } = await fetchFacebookMessages(pid, region, { ticketId: payload.ticketId, params });\n\n const currentMessages = getState().conversation.facebookMessages;\n if (payload.types === 'prev') {\n return {\n types: payload.types,\n facebookMessages: data.results.concat(currentMessages),\n };\n }\n return {\n types: payload.types,\n facebookMessages: data.results,\n initialOrNextFetchedTimestamp: Date.now(),\n };\n } catch (error) {\n if (axios.isAxiosError(error)) {\n toastBadRequestWarning(error);\n return rejectWithValue(error || '');\n }\n\n logException(error);\n return rejectWithValue(error);\n }\n }),\n\n sendFacebookMessage: createAsyncThunk<\n FacebookPageMessage,\n {\n ticketId: Ticket['id'];\n facebookPageId: FacebookPage['pageId'];\n payload: { recipientId: string; messageText?: string; filedata?: File | string };\n }\n >('desk/conversation/sendFacebookMessage', async (payload, { dispatch, getState, rejectWithValue }) => {\n const { region } = selectApplicationData(getState());\n const { pid } = selectDeskProject(getState());\n\n try {\n const { data } = await sendFacebookMessage({\n pid,\n region,\n ticketId: payload.ticketId,\n payload: payload.payload,\n });\n\n dispatch(\n ConversationActions.facebookMessageUpdated({\n facebookMessage: {\n ...data,\n senderId: payload.facebookPageId,\n timestamp: Date.now(),\n text: payload.payload.messageText,\n ticket: payload.ticketId,\n isEcho: true,\n isTemp: true,\n },\n }),\n );\n return data;\n } catch (error) {\n if (axios.isAxiosError(error)) {\n toastBadRequestWarning(error);\n return rejectWithValue(error || '');\n }\n\n logException(error);\n return rejectWithValue(error);\n }\n }),\n facebookMessageUpdated: createAction<{ facebookMessage: FacebookPageMessage }>(\n 'desk/conversation/facebookMessageUpdated',\n ),\n\n // facebook - feed\n fetchFacebookFeeds: createAsyncThunk<\n { types: FetchConversationMessagesType; facebookFeeds: FacebookFeedType[]; initialOrNextFetchedTimestamp?: number },\n {\n types: FetchConversationMessagesType;\n ticketId: Ticket['id'];\n nextLimit?: number;\n prevLimit?: number;\n ts: number;\n initial?: boolean;\n }\n >('desk/conversation/fetchFacebookFeeds', async (payload, { getState, rejectWithValue }) => {\n const { region } = selectApplicationData(getState());\n const { pid } = selectDeskProject(getState());\n\n const { ts, prevLimit = 0, nextLimit = 0 } = payload;\n const params = `prevLimit=${prevLimit}&nextLimit=${nextLimit}&ts=${ts}`;\n\n try {\n const { data } = await fetchFacebookFeeds(pid, region, { ticketId: payload.ticketId, params });\n\n const currentMessages = getState().conversation.facebookFeeds;\n if (payload.types === 'prev') {\n return {\n types: payload.types,\n facebookFeeds: data.results.concat(currentMessages),\n };\n }\n return {\n types: payload.types,\n facebookFeeds: data.results,\n initialOrNextFetchedTimestamp: Date.now(),\n };\n } catch (error) {\n if (axios.isAxiosError(error)) {\n toastBadRequestWarning(error);\n return rejectWithValue(error || '');\n }\n\n logException(error);\n return rejectWithValue(error);\n }\n }),\n\n createFacebookFeed: createAsyncThunk<\n void,\n {\n ticketId: Ticket['id'];\n fromId: string;\n payload: { parentFeedId: string; filedata?: File | string; messageText?: string };\n }\n >('desk/conversation/createFacebookFeed', async (payload, { dispatch, getState, rejectWithValue }) => {\n const { region } = selectApplicationData(getState());\n const { pid } = selectDeskProject(getState());\n\n try {\n const { data } = await createFacebookFeed({\n pid,\n region,\n ticketId: payload.ticketId,\n payload: payload.payload,\n });\n\n dispatch(\n ConversationActions.facebookFeedsUpdated({\n id: 0,\n attachments: '',\n feedId: data.feedId,\n fromId: payload.fromId,\n parentId: payload.payload.parentFeedId,\n feedType: 'comment',\n timestamp: new Date().valueOf(),\n message: payload.payload.messageText || '',\n // ticket: payload.ticketId,\n isTemp: true,\n reactions: '{\"reactionCounts\": {}, \"pageReactions\": []}',\n createdAt: '',\n status: 'default',\n messageType: 'social',\n }),\n );\n } catch (error) {\n if (axios.isAxiosError(error)) {\n toast.warning({ message: getErrorMessage(error) });\n return rejectWithValue(error || '');\n }\n\n logException(error);\n return rejectWithValue(error);\n }\n }),\n\n facebookFeedRequestUpdated: createAction<{ feed: FacebookFeedType; verb?: FacebookVerb }>(\n 'desk/conversation/facebookFeedRequestUpdated',\n ),\n\n editFacebookFeed: createAsyncThunk<\n FacebookFeedResponsePayload,\n { ticketId: number; feedId: string; messageText?: string; filedata?: File | string; isHidden?: boolean }\n >('desk/conversation/editFacebookFeed', async (payload, { dispatch, getState, rejectWithValue }) => {\n const { region } = selectApplicationData(getState());\n const { pid } = selectDeskProject(getState());\n\n try {\n const { data } = await editFacebookFeed({ pid, region, payload });\n\n dispatch(ConversationActions.facebookFeedsUpdated(data));\n return { feed: data };\n } catch (error) {\n if (axios.isAxiosError(error)) {\n toastBadRequestWarning(error);\n return rejectWithValue(error || '');\n }\n\n logException(error);\n return rejectWithValue(error);\n }\n }),\n\n facebookFeedsUpdated: createAction('desk/conversation/facebookFeedsUpdated'),\n\n deleteFacebookFeed: createAsyncThunk(\n 'desk/conversation/deleteFacebookFeed',\n async (payload, { getState, rejectWithValue }) => {\n const { region } = selectApplicationData(getState());\n const { pid } = selectDeskProject(getState());\n\n try {\n const { data } = await deleteFacebookFeed({\n pid,\n region,\n ticketId: payload.ticketId,\n feedId: payload.feed.feedId,\n });\n\n return { feed: data };\n } catch (error) {\n if (axios.isAxiosError(error)) {\n toastBadRequestWarning(error);\n return rejectWithValue(error || '');\n }\n\n logException(error);\n return rejectWithValue(error);\n }\n },\n ),\n\n facebookFeedLike: createAsyncThunk(\n 'desk/conversation/facebookFeedLike',\n async (payload, { getState, rejectWithValue }) => {\n const { region } = selectApplicationData(getState());\n const { pid } = selectDeskProject(getState());\n\n try {\n const { data } = await facebookFeedLike({\n pid,\n region,\n ticketId: payload.ticketId,\n feedId: payload.feed.feedId,\n });\n\n return data;\n } catch (error) {\n if (axios.isAxiosError(error)) {\n toastBadRequestWarning(error);\n return rejectWithValue(error || '');\n }\n\n logException(error);\n return rejectWithValue(error);\n }\n },\n ),\n\n facebookFeedUnlike: createAsyncThunk(\n 'desk/conversation/facebookFeedUnlike',\n async (payload, { getState, rejectWithValue }) => {\n const { region } = selectApplicationData(getState());\n const { pid } = selectDeskProject(getState());\n\n try {\n const { data } = await facebookFeedUnlike({\n pid,\n region,\n ticketId: payload.ticketId,\n feedId: payload.feed.feedId,\n });\n\n return data;\n } catch (error) {\n if (axios.isAxiosError(error)) {\n toastBadRequestWarning(error);\n return rejectWithValue(error || '');\n }\n\n logException(error);\n return rejectWithValue(error);\n }\n },\n ),\n\n // twitter\n fetchTwitterDirectMessages: createAsyncThunk<\n {\n types: FetchConversationMessagesType;\n messages: AttachmentParsedTwitterDirectMessageEvent[];\n initialOrNextFetchedTimestamp?: number;\n },\n FetchSocialMessagesRequestPayload\n >('desk/conversation/fetchTwitterDirectMessages', async (payload, { getState, rejectWithValue }) => {\n const { region } = selectApplicationData(getState());\n const { pid } = selectDeskProject(getState());\n const { ts, prevLimit = 0, nextLimit = 0 } = payload;\n const params = { prevLimit, nextLimit, ts };\n\n try {\n const { data } = await fetchTwitterDirectMessageEvents(pid, region, {\n ticketId: payload.ticketId,\n params,\n });\n\n const currentMessages = getState().conversation.twitterDirectMessages;\n const parsedMessages = data.results.map(parseTwitterDirectMessageEventAttachments);\n if (payload.types === 'prev') {\n return {\n types: payload.types,\n messages: parsedMessages.concat(currentMessages),\n };\n }\n return {\n types: payload.types,\n messages: parsedMessages,\n initialOrNextFetchedTimestamp: Date.now(),\n };\n } catch (error) {\n if (axios.isAxiosError(error)) {\n toastBadRequestWarning(error);\n return rejectWithValue(error);\n }\n\n logException(error);\n return rejectWithValue(error);\n }\n }),\n\n createTwitterDirectMessage: createAsyncThunk<\n AttachmentParsedTwitterDirectMessageEvent,\n { ticket: Ticket; recipientId: string; messageText: string; mediaId?: string }\n >('desk/conversation/createTwitterDirectMessage', async (payload, { getState, rejectWithValue }) => {\n const { region } = selectApplicationData(getState());\n const { pid } = selectDeskProject(getState());\n\n try {\n const { data } = await createTwitterDirectMessageEvent(pid, region, {\n ticketId: payload.ticket.id,\n recipientId: payload.recipientId,\n messageText: payload.messageText,\n mediaId: payload.mediaId,\n });\n\n return parseTwitterDirectMessageEventAttachments({ ...data, ticket: payload.ticket });\n } catch (error) {\n if (axios.isAxiosError(error)) {\n toastBadRequestWarning(\n (error.response?.data as { code: string })?.code === 'desk400104'\n ? window.intl.formatMessage({ id: 'desk.conversation.twitter.message.noti.tooLong' })\n : error,\n );\n return rejectWithValue(error);\n }\n\n logException(error);\n return rejectWithValue(error);\n }\n }),\n\n deleteTwitterDirectMessageEvent: createAsyncThunk(\n 'desk/conversation/deleteTwitterDirectMessageEvent',\n async (payload, { getState, rejectWithValue }) => {\n const { region } = selectApplicationData(getState());\n const { pid } = selectDeskProject(getState());\n\n try {\n const { data } = await patchTwitterDirectMessageEvent(pid, region, { id: payload.id, status: 'remove' });\n\n return data;\n } catch (error) {\n if (axios.isAxiosError(error)) {\n toastBadRequestWarning(error);\n return rejectWithValue(error);\n }\n\n logException(error);\n return rejectWithValue(error);\n }\n },\n ),\n\n twitterDirectMessageEventUpdated: createAction(\n 'desk/conversation/twitterDirectMessageEventUpdated',\n ),\n\n fetchTwitterStatuses: createAsyncThunk<\n { types: FetchConversationMessagesType; messages: MergedTwitterStatus[]; initialOrNextFetchedTimestamp?: number },\n FetchSocialMessagesRequestPayload\n >('desk/conversation/fetchTwitterStatuses', async (payload, { getState, rejectWithValue }) => {\n const { region } = selectApplicationData(getState());\n const { pid } = selectDeskProject(getState());\n const { ts, prevLimit = 0, nextLimit = 0 } = payload;\n const params = { prevLimit, nextLimit, ts };\n\n try {\n const { data } = await fetchTwitterStatuses(pid, region, { ticketId: payload.ticketId, params });\n\n const currentMessages = getState().conversation.twitterStatuses;\n const mergedTwitterStatuses = data.results.map(convertTwitterStatusTicketToMergedTwitterStatus);\n if (payload.types === 'prev') {\n return {\n types: payload.types,\n messages: mergedTwitterStatuses.concat(currentMessages),\n };\n }\n return {\n types: payload.types,\n messages: mergedTwitterStatuses,\n initialOrNextFetchedTimestamp: Date.now(),\n };\n } catch (error) {\n if (axios.isAxiosError(error)) {\n toastBadRequestWarning(error);\n return rejectWithValue(error);\n }\n\n logException(error);\n return rejectWithValue(error);\n }\n }),\n\n createTwitterStatus: createAsyncThunk<\n MergedTwitterStatus,\n { ticket: Ticket; recipientId: string; messageText: string; inReplyToStatusId?: string; mediaIds?: string[] }\n >('desk/conversation/createTwitterStatus', async (payload, { getState, rejectWithValue }) => {\n const { region } = selectApplicationData(getState());\n const { pid } = selectDeskProject(getState());\n\n try {\n const { data } = await createTwitterStatus(pid, region, {\n ticketId: payload.ticket.id,\n recipientId: payload.recipientId,\n messageText: payload.messageText,\n inReplyToStatusId: payload.inReplyToStatusId,\n mediaIds: payload.mediaIds && payload.mediaIds.length > 0 ? payload.mediaIds : undefined,\n });\n\n return convertTwitterStatusTicketToMergedTwitterStatus(data);\n } catch (error) {\n if (axios.isAxiosError(error)) {\n toastBadRequestWarning(error);\n return rejectWithValue(error);\n }\n\n logException(error);\n return rejectWithValue(error);\n }\n }),\n\n patchTwitterStatus: createAsyncThunk(\n 'desk/conversation/patchTwitterStatus',\n async (payload, { getState, rejectWithValue }) => {\n const { region } = selectApplicationData(getState());\n const { pid } = selectDeskProject(getState());\n\n try {\n const { data } = await patchTwitterStatusStatus(pid, region, { id: payload.id, status: payload.status });\n\n return data;\n } catch (error) {\n if (axios.isAxiosError(error)) {\n toastBadRequestWarning(error);\n return rejectWithValue(error);\n }\n\n logException(error);\n return rejectWithValue(error);\n }\n },\n ),\n\n patchTwitterStatusTwitterUser: createAsyncThunk<\n | { twitterStatusId: TwitterStatus['id']; retweeted: boolean; retweetCount?: number }\n | { twitterStatusId: TwitterStatus['id']; favorited: boolean; favoriteCount?: number },\n {\n id: TwitterStatusTwitterUser['id'];\n twitterStatusId: TwitterStatus['id'];\n update: Pick | Pick;\n }\n >(\n 'desk/conversation/patchTwitterStatusTwitterUser',\n async (payload, { getState, rejectWithValue }) => {\n const { region } = selectApplicationData(getState());\n const { pid } = selectDeskProject(getState());\n\n try {\n const twitterStatus = getState().conversation.twitterStatuses.find(\n (item) => item.id === payload.twitterStatusId,\n )!;\n\n if ('retweeted' in payload.update) {\n const { data } = await patchTwitterStatusRetweeted(pid, region, {\n id: payload.id,\n retweeted: payload.update.retweeted,\n });\n\n return {\n twitterStatusId: payload.twitterStatusId,\n retweeted: data.retweeted,\n retweetCount: twitterStatus.retweetCount + (data.retweeted ? 1 : -1),\n };\n }\n if ('favorited' in payload.update) {\n const { data } = await patchTwitterStatusFavorited(pid, region, {\n id: payload.id,\n favorited: payload.update.favorited,\n });\n\n return {\n twitterStatusId: payload.twitterStatusId,\n favorited: data.favorited,\n favoriteCount: twitterStatus.favoriteCount + (data.favorited ? 1 : -1),\n };\n }\n return rejectWithValue('');\n } catch (error) {\n if (axios.isAxiosError(error)) {\n toastBadRequestWarning(error);\n return rejectWithValue(getErrorMessage(error));\n }\n\n logException(error);\n return rejectWithValue(error);\n }\n },\n {\n condition: (arg, { getState }) =>\n !!getState().conversation.twitterStatuses.find((item) => item.id === arg.twitterStatusId),\n },\n ),\n\n twitterStatusFromDeskEventUpdated: createAction(\n 'desk/conversation/twitterStatusFromDeskEventUpdated',\n ),\n\n fetchInstagramComments: createAsyncThunk<\n {\n types: FetchConversationMessagesType;\n instagramComments: InstagramCommentTicket[];\n initialOrNextFetchedTimestamp?: number;\n },\n {\n types: FetchConversationMessagesType;\n ticketId: Ticket['id'];\n nextLimit?: number;\n prevLimit?: number;\n ts: number;\n initial?: boolean;\n }\n >('desk/conversation/fetchInstagramComments', async (payload, { getState, rejectWithValue }) => {\n const { region } = selectApplicationData(getState());\n const { pid } = selectDeskProject(getState());\n const { ts, prevLimit = 0, nextLimit = 0 } = payload;\n const params = { prevLimit, nextLimit, ts };\n\n try {\n const { data } = await fetchInstagramComments(pid, region, { ticketId: payload.ticketId, params });\n\n const currentMessages = getState().conversation.instagramComments;\n if (payload.types === 'prev') {\n return {\n types: payload.types,\n instagramComments: data.results.concat(currentMessages),\n };\n }\n return {\n types: payload.types,\n instagramComments: data.results,\n initialOrNextFetchedTimestamp: Date.now(),\n };\n } catch (error) {\n if (axios.isAxiosError(error)) {\n toast.error({ message: getErrorMessage(error) });\n return rejectWithValue(error);\n }\n\n logException(error);\n return rejectWithValue(error);\n }\n }),\n\n createInstagramComment: createAsyncThunk<\n void,\n {\n igMediaId: InstagramMedia['igMediaId'];\n instagramUsername?: InstagramUser['username'];\n parentIgCommentId?: string;\n text: string;\n ticket: Ticket;\n }\n >('desk/conversation/createInstagramComment', async (payload, { dispatch, getState, rejectWithValue }) => {\n const { region } = selectApplicationData(getState());\n const { pid } = selectDeskProject(getState());\n\n try {\n const { data } = await createInstagramComment(pid, region, {\n ticketId: payload.ticket.id,\n text: payload.text,\n parentIgCommentId: payload.parentIgCommentId,\n igMediaId: payload.igMediaId,\n });\n\n const message = {\n ...data,\n instagramComment: {\n ...data.instagramComment,\n senderId: payload.instagramUsername || '',\n isTemp: true,\n },\n };\n dispatch(ConversationActions.instagramCommentUpdated(message));\n } catch (error) {\n if (axios.isAxiosError(error)) {\n toastBadRequestWarning(error);\n return rejectWithValue(error);\n }\n\n logException(error);\n return rejectWithValue(error);\n }\n }),\n\n deleteInstagramComment: createAsyncThunk<\n InstagramComment,\n { ticketId: Ticket['id']; instagramCommentId: InstagramComment['id'] }\n >('desk/conversation/deleteInstagramComment', async (payload, { getState, rejectWithValue }) => {\n const { region } = selectApplicationData(getState());\n const { pid } = selectDeskProject(getState());\n\n try {\n const { data } = await deleteInstagramComment(pid, region, {\n ticketId: payload.ticketId,\n instagramCommentId: payload.instagramCommentId,\n });\n\n return data;\n } catch (error) {\n logException(error);\n return rejectWithValue(error);\n }\n }),\n\n instagramCommentUpdated: createAction('desk/conversation/instagramCommentUpdated'),\n instagramCommentFromDeskEventUpdated: createAction(\n 'desk/conversation/instagramCommentFromDeskEventUpdated',\n ),\n\n fetchInstagramMessages: createAsyncThunk<\n {\n types: FetchConversationMessagesType;\n instagramMessages: InstagramMessageTicket[];\n initialOrNextFetchedTimestamp?: number;\n },\n {\n types: FetchConversationMessagesType;\n ticketId: Ticket['id'];\n nextLimit?: number;\n prevLimit?: number;\n ts: number;\n initial?: boolean;\n }\n >('desk/conversation/fetchInstagramMessages', async (payload, { getState, rejectWithValue }) => {\n const { region } = selectApplicationData(getState());\n const { pid } = selectDeskProject(getState());\n const { ts, prevLimit = 0, nextLimit = 0 } = payload;\n const params = { prevLimit, nextLimit, ts };\n\n try {\n const { data } = await fetchInstagramMessages(pid, region, { ticketId: payload.ticketId, params });\n\n const currentMessages = getState().conversation.instagramMessages;\n if (payload.types === 'prev') {\n return {\n types: payload.types,\n instagramMessages: data.results.concat(currentMessages),\n };\n }\n return {\n types: payload.types,\n instagramMessages: data.results,\n initialOrNextFetchedTimestamp: Date.now(),\n };\n } catch (error) {\n if (axios.isAxiosError(error)) {\n toastBadRequestWarning(error);\n return rejectWithValue(error || '');\n }\n\n logException(error);\n return rejectWithValue(error);\n }\n }),\n\n createInstagramMessage: createAsyncThunk(\n 'desk/conversation/createInstagramMessage',\n async (payload, { dispatch, getState, rejectWithValue }) => {\n const { region } = selectApplicationData(getState());\n const { pid } = selectDeskProject(getState());\n\n try {\n const { data } = await createInstagramMessage(pid, region, {\n ticketId: payload.ticket.id,\n text: payload.text,\n media: payload.media,\n });\n\n dispatch(ConversationActions.instagramMessageUpdated(data));\n } catch (error) {\n if (axios.isAxiosError(error)) {\n toastBadRequestWarning(error);\n return rejectWithValue(error);\n }\n\n logException(error);\n return rejectWithValue(error);\n }\n },\n ),\n\n instagramMessageUpdated: createAction('desk/conversation/instagramMessageUpdated'),\n instagramMessageFromDeskEventUpdated: createAction(\n 'desk/conversation/instagramMessageFromDeskEventUpdated',\n ),\n instagramMessageUnsendUpdated: createAction(\n 'desk/conversation/instagramMessageUnsendUpdated',\n ),\n\n fetchWhatsAppMessages: createAsyncThunk<\n {\n types: FetchConversationMessagesType;\n whatsAppMessages: WhatsAppMessageType[];\n initialOrNextFetchedTimestamp?: number;\n },\n {\n types: FetchConversationMessagesType;\n ticketId: Ticket['id'];\n nextLimit?: number;\n prevLimit?: number;\n ts: number;\n }\n >('desk/conversation/fetchWhatsAppMessages', async (payload, { getState, rejectWithValue }) => {\n const { region } = selectApplicationData(getState());\n const { pid } = selectDeskProject(getState());\n const { prevLimit = 0, nextLimit = 0, ts, types } = payload;\n\n try {\n const { data } = await fetchWhatsAppMessages(pid, region, {\n ticketId: payload.ticketId,\n params: { prevLimit, nextLimit, ts },\n });\n\n const currentMessages = getState().conversation.whatsAppMessages;\n if (types === 'prev') {\n return {\n types,\n whatsAppMessages: data.results.concat(currentMessages),\n };\n }\n return {\n types,\n whatsAppMessages: data.results,\n initialOrNextFetchedTimestamp: Date.now(),\n };\n } catch (error) {\n if (axios.isAxiosError(error)) {\n toastBadRequestWarning(error);\n return rejectWithValue(error);\n }\n\n logException(error);\n return rejectWithValue(error);\n }\n }),\n\n createWhatsAppMessage: createAsyncThunk<\n WhatsAppMessageType,\n { ticketId: Ticket['id']; toNumber: string; messageText?: string; filedata?: File | string }\n >('desk/conversation/createWhatsAppMessage', async (payload, { getState, rejectWithValue }) => {\n const { region } = selectApplicationData(getState());\n const { pid } = selectDeskProject(getState());\n\n try {\n const { data } = await createWhatsAppMessage(pid, region, {\n ticketId: payload.ticketId,\n toNumber: payload.toNumber,\n messageText: payload.messageText,\n filedata: payload.filedata,\n });\n\n return data;\n } catch (error) {\n logException(error);\n return rejectWithValue(error);\n }\n }),\n\n whatsAppMessageFromDeskEventUpdated: createAction(\n 'desk/conversation/whatsAppMessageFromDeskEventUpdated',\n ),\n};\n","import snakeCase from 'lodash/snakeCase';\n\nimport DeskApiAxios from './DeskApiAxios';\n\nexport const deskAuthentication: DeskAuthentication = (pid, region, { token }) => {\n const axios = new DeskApiAxios({ pid, region });\n return axios.post('auth/token', { token, auth_type: 'dashboard_token' });\n};\n\nexport const signOut: DeskSignoutAPI = (pid, region) => {\n const axios = new DeskApiAxios({ pid, region });\n return axios.post('auth/sign_out');\n};\n\n/**\n * Update Desk Project Settings\n * @param {pid, payload}\n */\nexport const updateProjectSetting: UpdateProjectSettingAPI = (pid, region, { type, payload }) => {\n const axios = new DeskApiAxios({ pid, region });\n return axios.patch(`projects/${pid}/settings_${snakeCase(type)}`, payload);\n};\n\nexport const fetchProjectApiKeys: FetchProjectApiKeysAPI = (pid, region, { offset = 0, limit = 50 }) => {\n const params = `limit=${limit}&offset=${offset}`;\n const axios = new DeskApiAxios({ pid, region });\n return axios.get(`projects/project_api_keys/?${params}`);\n};\n\nexport const createProjectApiKey: CreateProjectApiKeyAPI = (pid, region, { payload }) => {\n const axios = new DeskApiAxios({ pid, region });\n return axios.post('project_api_keys', payload);\n};\n\nexport const deleteProjectApiKey: DeleteProjectApiKeyAPI = (pid, region, { id }) => {\n const data: { status: ApiTokenStatus } = { status: 'INACTIVE' };\n const axios = new DeskApiAxios({ pid, region });\n return axios.patch(`project_api_keys/${id}/`, data);\n};\n","import { createAction } from '@reduxjs/toolkit';\nimport axios from 'axios';\n\nimport { browserRouter } from '@/browserRouter';\nimport createAsyncThunk from '@/redux/createAsyncThunk';\nimport { getDeskToken } from '@common/api/authentication';\nimport { DialogsActions } from '@common/redux/actions/dialogs';\nimport type { AgentConnection } from '@constants/index';\nimport { DeskSettingsPage } from '@constants/index';\nimport { selectApplicationData } from '@core/redux/selectors/applicationState';\nimport {\n createProjectApiKey,\n deleteProjectApiKey,\n deskAuthentication,\n fetchProjectApiKeys,\n updateProjectSetting,\n} from '@desk/api/desk';\nimport { toast } from '@feather/components/notification';\nimport logException from '@utils/logException';\nimport toastBadRequestWarning from '@utils/toastBadRequestWarning';\n\nimport { selectDeskProject } from '../selectors/desk';\n\nexport const DeskActions = {\n deskAuthentication: createAsyncThunk(\n 'desk/desk/deskAuthentication',\n async (_, { dispatch, getState, rejectWithValue }) => {\n const application = selectApplicationData(getState());\n const { pid } = selectDeskProject(getState());\n const userEmail = getState().auth.user.email;\n\n try {\n const {\n data: { token },\n } = await getDeskToken(application?.app_id || '');\n const { data } = await deskAuthentication(pid, application.region, { token });\n\n dispatch(\n DeskActions.deskAuthenticated({\n id: data.agent.user,\n agent: { ...data.agent, project: data.project, email: userEmail },\n project: data.project,\n }),\n );\n } catch (error) {\n if (axios.isAxiosError(error)) {\n toastBadRequestWarning(error);\n browserRouter.navigate('/');\n return rejectWithValue(error || '');\n }\n\n logException(error);\n return rejectWithValue(error);\n }\n },\n ),\n deskAuthenticated: createAction<{ id: AuthAgent['id']; agent: AuthAgent; project: Project }>(\n 'desk/desk/deskAuthenticated',\n ),\n\n updateProject: createAsyncThunk<\n void,\n {\n type:\n | DeskSettingsPage.general\n | DeskSettingsPage.automation\n | DeskSettingsPage.triggers\n | DeskSettingsPage.security\n | DeskSettingsPage.aiFeatures;\n payload: Partial;\n options?: { snoozeDefaultToast?: boolean };\n }\n >('desk/desk/updateProject', async (payload, { dispatch, getState, rejectWithValue }) => {\n const { region } = selectApplicationData(getState());\n const { pid } = selectDeskProject(getState());\n const { snoozeDefaultToast } = payload.options ?? { snoozeDefaultToast: false };\n\n try {\n const { data } = await updateProjectSetting(pid, region, { type: payload.type, payload: payload.payload });\n\n dispatch(DeskActions.setDeskProject(data));\n if (!snoozeDefaultToast) {\n toast.success({ message: window.intl.formatMessage({ id: 'desk.settings.message.updateProject.success' }) });\n }\n } catch (error) {\n if (axios.isAxiosError(error)) {\n if (!snoozeDefaultToast) {\n toastBadRequestWarning(error);\n }\n return rejectWithValue(error || '');\n }\n\n logException(error);\n return rejectWithValue(error);\n }\n }),\n\n updateOperationHours: createAsyncThunk(\n 'desk/desk/updateOperationHours',\n async (payload, { dispatch, getState, rejectWithValue }) => {\n const { region } = selectApplicationData(getState());\n const { pid } = selectDeskProject(getState());\n\n try {\n const { data } = await updateProjectSetting(pid, region, {\n type: DeskSettingsPage.general,\n payload,\n });\n\n dispatch(DeskActions.setDeskProject(data));\n } catch (error) {\n if (axios.isAxiosError(error)) {\n toastBadRequestWarning(error);\n return rejectWithValue(error || '');\n }\n\n logException(error);\n return rejectWithValue(error);\n }\n },\n ),\n\n fetchApiTokens: createAsyncThunk<\n { count: number; results: ApiToken[]; pagination: LimitOffsetPagination },\n { offset: number; limit: number }\n >('desk/desk/fetchApiTokens', async (payload, { dispatch, getState, rejectWithValue }) => {\n const { region } = selectApplicationData(getState());\n const { pid } = selectDeskProject(getState());\n\n try {\n const { data } = await fetchProjectApiKeys(pid, region, { offset: payload.offset, limit: payload.limit });\n\n dispatch(DeskActions.apiTokenPaginationSet({ offset: payload.offset, limit: payload.limit }));\n return data;\n } catch (error) {\n if (axios.isAxiosError(error)) {\n toastBadRequestWarning(error);\n return rejectWithValue(error || '');\n }\n\n logException(error);\n return rejectWithValue(error);\n }\n }),\n apiTokenPaginationSet: createAction<{ offset: number; limit: number }>('desk/desk/apiTokenPaginationSet'),\n\n createApiToken: createAsyncThunk(\n 'desk/desk/createApiToken',\n async (payload, { dispatch, getState, rejectWithValue }) => {\n const { region } = selectApplicationData(getState());\n const { pid } = selectDeskProject(getState());\n const { limit, count } = getState().desk.apiTokens.pagination;\n const offset = Math.floor((count + 1) / limit) * limit;\n\n try {\n dispatch(DialogsActions.setIsFetching(true));\n await createProjectApiKey(pid, region, { payload });\n\n dispatch(DeskActions.fetchApiTokens({ limit, offset }));\n dispatch(DialogsActions.hideDialog());\n } catch (error) {\n if (axios.isAxiosError(error)) {\n toastBadRequestWarning(error);\n return rejectWithValue(error || '');\n }\n\n logException(error);\n return rejectWithValue(error);\n } finally {\n dispatch(DialogsActions.setIsFetching(false));\n }\n },\n ),\n deleteApiToken: createAsyncThunk(\n 'desk/desk/deleteApiToken',\n async (payload, { dispatch, getState, rejectWithValue }) => {\n const { region } = selectApplicationData(getState());\n const { pid } = selectDeskProject(getState());\n\n try {\n await deleteProjectApiKey(pid, region, { id: payload.id });\n\n const pagination = { ...getState().desk.apiTokens.pagination };\n if (payload.isLastItemOnPage) {\n pagination.offset = Math.max(0, pagination.offset - pagination.limit);\n }\n dispatch(DeskActions.fetchApiTokens(pagination));\n } catch (error) {\n if (axios.isAxiosError(error)) {\n toastBadRequestWarning(error);\n return rejectWithValue(error || '');\n }\n\n logException(error);\n return rejectWithValue(error);\n }\n },\n ),\n\n setAgentConnection: createAction('desk/desk/setAgentConnection'),\n setDeskConnected: createAction('desk/desk/setDeskConnected'),\n setDeskProject: createAction>('desk/desk/setDeskProject'),\n setDeskAgent: createAction('desk/desk/setDeskAgent'),\n resetDesk: createAction('desk/desk/resetDesk'),\n};\n","import { createReducer, isAnyOf } from '@reduxjs/toolkit';\n\nimport { AuthenticationActions } from '@common/redux/actions/authentication';\nimport { ConversationActions } from '@desk/redux/actions/conversation';\n\nimport { DeskActions } from '../actions/desk';\n\nexport interface ConversationState {\n isFetching: boolean;\n isFetchingMessages: boolean;\n\n /**\n * In-app chat tickets' messages can be read using Sendbird SDK or Platform API.\n */\n messages: SendbirdChatMessage.AllMessage[] | SendbirdChatPlatformAPI.AllMessageType[];\n\n facebookMessages: FacebookPageMessage[];\n facebookFeeds: FacebookFeedType[];\n twitterDirectMessages: AttachmentParsedTwitterDirectMessageEvent[];\n twitterStatuses: MergedTwitterStatus[];\n instagramComments: InstagramCommentTicket[];\n instagramMessages: InstagramMessageTicket[];\n whatsAppMessages: WhatsAppMessageType[];\n ticket: Ticket | null;\n typingStatus: TypingStatus;\n initialOrNextFetchedTimestamp?: number;\n}\n\nconst initialState: ConversationState = {\n isFetching: true,\n isFetchingMessages: false,\n messages: [],\n facebookMessages: [],\n facebookFeeds: [],\n twitterDirectMessages: [],\n twitterStatuses: [],\n instagramComments: [],\n instagramMessages: [],\n whatsAppMessages: [],\n ticket: null,\n typingStatus: {\n typingMembers: [],\n agentTyping: false,\n othersTyping: false,\n },\n};\n\nexport const conversationReducer = createReducer(initialState, (builder) => {\n // ConversationActions\n builder\n .addCase(ConversationActions.fetchConversationMessages.pending, (state, { meta }) => {\n if (meta.arg.types === 'initial') {\n state.isFetchingMessages = true;\n state.messages = [];\n } else {\n state.isFetchingMessages = false;\n }\n })\n .addCase(ConversationActions.fetchConversationMessages.fulfilled, (state, { payload }) => {\n const { messages, initialOrNextFetchedTimestamp } = payload;\n state.isFetchingMessages = false;\n state.messages = messages;\n if (initialOrNextFetchedTimestamp) {\n state.initialOrNextFetchedTimestamp = initialOrNextFetchedTimestamp;\n }\n })\n .addCase(ConversationActions.fetchFacebookMessages.pending, (state, { meta }) => {\n if (meta.arg.types === 'initial') {\n state.isFetchingMessages = true;\n state.facebookMessages = [];\n } else {\n state.isFetchingMessages = false;\n }\n })\n .addCase(ConversationActions.fetchFacebookMessages.fulfilled, (state, { payload }) => {\n const { facebookMessages, initialOrNextFetchedTimestamp } = payload;\n state.isFetchingMessages = false;\n state.facebookMessages = facebookMessages;\n if (initialOrNextFetchedTimestamp) {\n state.initialOrNextFetchedTimestamp = initialOrNextFetchedTimestamp;\n }\n })\n .addCase(ConversationActions.facebookMessageUpdated, (state, { payload }) => {\n const hasTemp = state.facebookMessages.some(\n (facebookMessage) => facebookMessage.mid === payload.facebookMessage.mid,\n );\n if (hasTemp) {\n state.facebookMessages = state.facebookMessages.map((facebookMessage) => {\n if (facebookMessage.mid === payload.facebookMessage.mid) {\n return payload.facebookMessage;\n }\n return facebookMessage;\n });\n } else {\n state.facebookMessages.push(payload.facebookMessage);\n // When sending a new message, updating initialOrNextFetchedTimestamp state will scroll messages to the bottom.\n state.initialOrNextFetchedTimestamp = Date.now();\n }\n })\n .addCase(ConversationActions.conversationMessagesReset, (state) => {\n state.messages = [];\n state.facebookMessages = [];\n state.facebookFeeds = [];\n state.twitterDirectMessages = [];\n state.twitterStatuses = [];\n state.instagramComments = [];\n state.whatsAppMessages = [];\n })\n .addCase(ConversationActions.fetchFacebookFeeds.pending, (state, { meta }) => {\n if (meta.arg.types === 'initial') {\n state.isFetchingMessages = true;\n state.facebookFeeds = [];\n } else {\n state.isFetchingMessages = false;\n }\n })\n .addCase(ConversationActions.fetchFacebookFeeds.fulfilled, (state, { payload }) => {\n const { facebookFeeds, initialOrNextFetchedTimestamp } = payload;\n state.isFetchingMessages = false;\n state.facebookFeeds = facebookFeeds;\n if (initialOrNextFetchedTimestamp) {\n state.initialOrNextFetchedTimestamp = initialOrNextFetchedTimestamp;\n }\n })\n .addCase(ConversationActions.facebookFeedsUpdated, (state, { payload }) => {\n const hasTemp = state.facebookFeeds.some((item) => item.feedId === payload.feedId);\n if (hasTemp) {\n state.facebookFeeds = state.facebookFeeds.map((feed) => {\n if (feed.feedId === payload.feedId) {\n return payload;\n }\n return feed;\n });\n } else {\n state.facebookFeeds.push(payload);\n // When sending a new message, updating initialOrNextFetchedTimestamp state will scroll messages to the bottom.\n state.initialOrNextFetchedTimestamp = Date.now();\n }\n })\n .addCase(ConversationActions.facebookFeedRequestUpdated, (state, { payload }) => {\n state.facebookFeeds = state.facebookFeeds.map((feed) => {\n if (feed.feedId === payload.feed.feedId) {\n return payload.feed;\n }\n return feed;\n });\n })\n .addCase(ConversationActions.fetchTwitterDirectMessages.pending, (state, { meta }) => {\n if (meta.arg.types === 'initial') {\n state.isFetchingMessages = true;\n state.twitterDirectMessages = [];\n } else {\n state.isFetchingMessages = false;\n }\n })\n .addCase(ConversationActions.fetchTwitterDirectMessages.fulfilled, (state, { payload }) => {\n const { messages, initialOrNextFetchedTimestamp } = payload;\n state.isFetchingMessages = false;\n state.twitterDirectMessages = messages;\n if (initialOrNextFetchedTimestamp) {\n state.initialOrNextFetchedTimestamp = initialOrNextFetchedTimestamp;\n }\n })\n .addCase(ConversationActions.deleteTwitterDirectMessageEvent.fulfilled, (state, { payload }) => {\n state.twitterDirectMessages = state.twitterDirectMessages.map((item) =>\n item.eventId === payload.eventId ? { ...item, status: payload.status } : item,\n );\n })\n .addCase(ConversationActions.fetchTwitterStatuses.pending, (state, { meta }) => {\n if (meta.arg.types === 'initial') {\n state.isFetchingMessages = true;\n state.twitterStatuses = [];\n } else {\n state.isFetchingMessages = false;\n }\n })\n .addCase(ConversationActions.fetchTwitterStatuses.fulfilled, (state, { payload }) => {\n const { messages, initialOrNextFetchedTimestamp } = payload;\n state.isFetchingMessages = false;\n state.twitterStatuses = messages;\n if (initialOrNextFetchedTimestamp) {\n state.initialOrNextFetchedTimestamp = initialOrNextFetchedTimestamp;\n }\n })\n .addCase(ConversationActions.createTwitterStatus.fulfilled, (state, { payload }) => {\n const duplicatedStatusIndex = state.twitterStatuses.findIndex((item) => item.statusId === payload.statusId);\n if (duplicatedStatusIndex > -1) {\n state.twitterStatuses[duplicatedStatusIndex] = payload;\n } else {\n state.twitterStatuses.push(payload);\n // If got a new message, updating initialOrNextFetchedTimestamp state will scroll messages to the bottom.\n state.initialOrNextFetchedTimestamp = Date.now();\n }\n })\n .addCase(ConversationActions.twitterStatusFromDeskEventUpdated, (state, { payload }) => {\n if (state.twitterStatuses.some((item) => item.statusId === payload.statusId)) {\n state.twitterStatuses = state.twitterStatuses.map((item) =>\n item.statusId === payload.statusId ? { ...item, ...payload } : item,\n );\n } else {\n state.twitterStatuses.push(payload);\n // If got a new message, updating initialOrNextFetchedTimestamp state will scroll messages to the bottom.\n state.initialOrNextFetchedTimestamp = Date.now();\n }\n })\n .addCase(ConversationActions.patchTwitterStatus.fulfilled, (state, { payload }) => {\n state.twitterStatuses = state.twitterStatuses.map((item) =>\n item.id === payload.id ? { ...item, status: payload.status } : item,\n );\n })\n .addCase(ConversationActions.patchTwitterStatusTwitterUser.fulfilled, (state, { payload }) => {\n const { twitterStatusId, ...updates } = payload;\n state.twitterStatuses = state.twitterStatuses.map((item) =>\n item.id === twitterStatusId ? { ...item, ...updates } : item,\n );\n })\n .addCase(ConversationActions.fetchInstagramComments.pending, (state, { meta }) => {\n if (meta.arg.types === 'initial') {\n state.isFetchingMessages = true;\n state.instagramComments = [];\n } else {\n state.isFetchingMessages = false;\n }\n })\n .addCase(ConversationActions.fetchInstagramComments.fulfilled, (state, { payload }) => {\n const { instagramComments, initialOrNextFetchedTimestamp } = payload;\n state.isFetchingMessages = false;\n state.instagramComments = instagramComments;\n if (initialOrNextFetchedTimestamp) {\n state.initialOrNextFetchedTimestamp = initialOrNextFetchedTimestamp;\n }\n })\n .addCase(ConversationActions.fetchInstagramComments.rejected, (state) => {\n state.isFetchingMessages = false;\n })\n .addCase(ConversationActions.instagramCommentUpdated, (state, { payload }) => {\n const duplicatedEventIndex = state.instagramComments.findIndex((item) => item.id === payload.id);\n const isUpdatable = state.ticket?.id === (payload.ticket as Ticket).id;\n\n if (isUpdatable) {\n if (duplicatedEventIndex > -1) {\n state.instagramComments[duplicatedEventIndex] = payload;\n } else {\n state.instagramComments.push(payload);\n state.initialOrNextFetchedTimestamp = Date.now();\n }\n }\n })\n .addCase(ConversationActions.instagramCommentFromDeskEventUpdated, (state, { payload }) => {\n if (state.instagramComments.some((item) => item.instagramComment.id === payload.instagramComment.id)) {\n state.instagramComments = state.instagramComments.map((item) =>\n item.instagramComment.id === payload.instagramComment.id ? { ...item, ...payload } : item,\n );\n } else {\n state.instagramComments.push(payload);\n state.initialOrNextFetchedTimestamp = Date.now();\n }\n })\n .addCase(ConversationActions.deleteInstagramComment.pending, (state) => {\n state.isFetchingMessages = true;\n })\n .addCase(ConversationActions.deleteInstagramComment.fulfilled, (state, { payload }) => {\n if (state.instagramComments.some((item) => item.instagramComment.id === payload.id)) {\n state.instagramComments = state.instagramComments.map((item) =>\n item.instagramComment.id === payload.id ? { ...item, instagramComment: payload } : item,\n );\n state.isFetchingMessages = false;\n }\n })\n .addCase(ConversationActions.deleteInstagramComment.rejected, (state) => {\n state.isFetchingMessages = false;\n })\n .addCase(ConversationActions.fetchInstagramMessages.pending, (state, { meta }) => {\n if (meta.arg.types === 'initial') {\n state.isFetchingMessages = true;\n state.instagramMessages = [];\n } else {\n state.isFetchingMessages = false;\n }\n })\n .addCase(ConversationActions.fetchInstagramMessages.fulfilled, (state, { payload }) => {\n const { instagramMessages, initialOrNextFetchedTimestamp } = payload;\n state.isFetchingMessages = false;\n state.instagramMessages = instagramMessages;\n if (initialOrNextFetchedTimestamp) {\n state.initialOrNextFetchedTimestamp = initialOrNextFetchedTimestamp;\n }\n })\n .addCase(ConversationActions.fetchInstagramMessages.rejected, (state) => {\n state.isFetchingMessages = false;\n })\n .addCase(ConversationActions.instagramMessageUpdated, (state, { payload }) => {\n const isUpdatable = state.ticket?.id === (payload.ticket as Ticket).id;\n\n if (isUpdatable) {\n const duplicatedEventIndex = state.instagramMessages.findIndex((item) => item.id === payload.id);\n if (duplicatedEventIndex > -1) {\n state.instagramMessages[duplicatedEventIndex] = payload;\n } else {\n state.instagramMessages.push(payload);\n state.initialOrNextFetchedTimestamp = Date.now();\n }\n }\n })\n .addCase(ConversationActions.instagramMessageFromDeskEventUpdated, (state, { payload }) => {\n if (state.instagramMessages.some((item) => item.id === payload.id)) {\n state.instagramMessages = state.instagramMessages.map((item) =>\n item.id === payload.id ? { ...item, ...payload } : item,\n );\n } else {\n state.instagramMessages.push(payload);\n state.initialOrNextFetchedTimestamp = Date.now();\n }\n })\n .addCase(ConversationActions.instagramMessageUnsendUpdated, (state, { payload }) => {\n state.instagramMessages = state.instagramMessages.filter((message) => message.id !== payload.id);\n })\n .addCase(ConversationActions.fetchWhatsAppMessages.pending, (state, { meta }) => {\n if (meta.arg.types === 'initial') {\n state.isFetchingMessages = true;\n state.whatsAppMessages = [];\n } else {\n state.isFetchingMessages = false;\n }\n })\n .addCase(ConversationActions.fetchWhatsAppMessages.fulfilled, (state, { payload }) => {\n const { whatsAppMessages, initialOrNextFetchedTimestamp } = payload;\n state.isFetchingMessages = false;\n state.whatsAppMessages = whatsAppMessages;\n if (initialOrNextFetchedTimestamp) {\n state.initialOrNextFetchedTimestamp = initialOrNextFetchedTimestamp;\n }\n })\n .addCase(ConversationActions.fetchWhatsAppMessages.rejected, (state) => {\n state.isFetchingMessages = false;\n })\n .addCase(ConversationActions.createWhatsAppMessage.fulfilled, (state, { payload }) => {\n const duplicatedMessageIndex = state.whatsAppMessages.findIndex((message) => message.id === payload.id);\n\n if (duplicatedMessageIndex > -1) {\n state.whatsAppMessages[duplicatedMessageIndex] = payload;\n } else {\n state.whatsAppMessages.push(payload);\n state.initialOrNextFetchedTimestamp = Date.now();\n }\n })\n .addCase(ConversationActions.whatsAppMessageFromDeskEventUpdated, (state, { payload }) => {\n if (state.whatsAppMessages.some((item) => item.id === payload.id)) {\n state.whatsAppMessages = state.whatsAppMessages.map((item) =>\n item.id === payload.id ? { ...item, ...payload } : item,\n );\n } else {\n state.whatsAppMessages.push(payload);\n // If got a new message, updating initialOrNextFetchedTimestamp state will scroll messages to the bottom.\n state.initialOrNextFetchedTimestamp = Date.now();\n }\n })\n .addCase(ConversationActions.fetchConversation.pending, (state) => {\n state.isFetching = true;\n })\n /**\n * Set current viewing active conversation ticket\n */\n .addCase(ConversationActions.conversationFetched, (state, { payload }) => {\n state.isFetching = false;\n state.ticket = payload;\n })\n .addCase(ConversationActions.conversationAssignmentSet, (state, { payload }) => {\n if (state.ticket) {\n state.ticket.recentAssignment = payload;\n } else {\n state.ticket = null;\n }\n })\n .addCase(ConversationActions.typingStatusSet, (state, { payload }) => {\n state.typingStatus = payload;\n })\n .addCase(ConversationActions.agentTypingStatusSet, (state, { payload }) => {\n state.typingStatus.agentTyping = payload;\n })\n .addCase(ConversationActions.othersTypingStatusSet, (state, { payload }) => {\n state.typingStatus = { ...state.typingStatus, ...payload };\n })\n .addCase(ConversationActions.conversationTicketMessageUpdated, (state, { payload }) => {\n state.messages = state.messages.map((message) =>\n message.message_id === payload.messageId ? { ...message, ...payload.updated } : message,\n );\n })\n .addMatcher(\n isAnyOf(\n ConversationActions.fetchTwitterDirectMessages.rejected,\n ConversationActions.fetchTwitterStatuses.rejected,\n ),\n (state) => {\n state.isFetchingMessages = false;\n },\n )\n .addMatcher(\n isAnyOf(\n ConversationActions.createTwitterDirectMessage.fulfilled,\n ConversationActions.twitterDirectMessageEventUpdated,\n ),\n (state, { payload }) => {\n const duplicatedEventIndex = state.twitterDirectMessages.findIndex((item) => item.eventId === payload.eventId);\n if (duplicatedEventIndex > -1) {\n state.twitterDirectMessages[duplicatedEventIndex] = payload;\n } else {\n state.twitterDirectMessages.push(payload);\n // If got a new message, updating initialOrNextFetchedTimestamp state will scroll messages to the bottom.\n state.initialOrNextFetchedTimestamp = Date.now();\n }\n },\n );\n\n // Other actions\n builder.addMatcher(\n isAnyOf(ConversationActions.conversationReset, AuthenticationActions.unauthenticated, DeskActions.resetDesk),\n () => initialState,\n );\n});\n","import { createReducer, isAnyOf } from '@reduxjs/toolkit';\n\nimport { AuthenticationActions } from '@common/redux/actions/authentication';\n\nimport { DeskActions } from '../actions/desk';\n\nexport interface DeskStoreState {\n isFetching: boolean;\n isUpdating: boolean;\n authenticated: boolean;\n connected: boolean; // SDK connected (Open Channel)\n id: number;\n project: Project;\n agent: AuthAgent;\n apiTokens: {\n items: ApiToken[];\n isFetching: boolean;\n pagination: LimitOffsetPagination;\n };\n}\n\nconst initialState: DeskStoreState = {\n isFetching: false,\n isUpdating: false,\n authenticated: false,\n connected: false,\n id: 0,\n project: {} as Project,\n agent: {} as AgentDetail,\n apiTokens: {\n items: [],\n isFetching: false,\n pagination: {\n limit: 25,\n offset: 0,\n count: 0,\n page: 1,\n },\n },\n};\n\nexport const deskReducer = createReducer(initialState, (builder) => {\n // DeskActions\n builder\n .addCase(DeskActions.deskAuthentication.pending, (state) => {\n state.isFetching = true;\n })\n .addCase(DeskActions.deskAuthenticated, (state, { payload }) => {\n state.isFetching = false;\n state.authenticated = true;\n state.id = payload.id;\n state.agent = payload.agent;\n state.project = payload.project;\n })\n .addCase(DeskActions.setDeskConnected, (state, { payload }) => {\n state.connected = payload;\n })\n .addCase(DeskActions.setDeskProject, (state, { payload }) => {\n state.project = {\n ...state.project,\n ...payload,\n };\n })\n .addCase(DeskActions.setDeskAgent, (state, { payload }) => {\n state.agent = {\n ...state.agent,\n ...payload,\n };\n })\n .addCase(DeskActions.setAgentConnection, (state, { payload }) => {\n state.agent.connection = payload;\n })\n .addCase(DeskActions.fetchApiTokens.pending, (state) => {\n state.apiTokens.isFetching = true;\n })\n .addCase(DeskActions.fetchApiTokens.fulfilled, (state, { payload }) => {\n state.apiTokens = {\n items: payload.results,\n pagination: {\n ...state.apiTokens.pagination,\n count: payload.count,\n },\n isFetching: false,\n };\n })\n .addCase(DeskActions.fetchApiTokens.rejected, (state) => {\n state.apiTokens.isFetching = false;\n })\n .addCase(DeskActions.apiTokenPaginationSet, (state, { payload }) => {\n state.apiTokens.pagination.limit = payload.limit;\n state.apiTokens.pagination.offset = payload.offset;\n state.apiTokens.pagination.page = payload.offset / payload.limit + 1;\n })\n .addCase(DeskActions.resetDesk, () => initialState);\n\n // Other actions\n builder.addCase(AuthenticationActions.unauthenticated, () => initialState);\n\n // DeskActions\n builder\n .addMatcher(isAnyOf(DeskActions.updateProject.pending, DeskActions.updateOperationHours.pending), (state) => {\n state.isUpdating = true;\n })\n .addMatcher(\n isAnyOf(\n DeskActions.updateProject.fulfilled,\n DeskActions.updateProject.rejected,\n DeskActions.updateOperationHours.fulfilled,\n DeskActions.updateOperationHours.rejected,\n ),\n (state) => {\n state.isUpdating = false;\n },\n );\n});\n","import { axios as cancellableAxios, getDeskURL } from '@api/shared';\n\nimport DeskApiAxios from './DeskApiAxios';\n\nexport const facebookLoadPages: FacebookLoadPagesAPI = (pid, region = '', { accessToken }) => {\n const axios = new DeskApiAxios({ pid, region });\n return axios.post('facebook_pages/load_pages/', { short_lived_user_access_token: accessToken });\n};\n\nexport const facebookSubscribe: FacebookSubscribeAPI = (pid, region = '', { page_id }) => {\n const axios = new DeskApiAxios({ pid, region });\n return axios.post(`facebook_pages/${page_id}/subscribe`, {});\n};\n\nexport const facebookUnsubscribe: FacebookUnsubscribeAPI = (pid, region = '', { page_id }) => {\n const axios = new DeskApiAxios({ pid, region });\n return axios.delete(`facebook_pages/${page_id}/unsubscribe`);\n};\n\nexport const facebookActivePages: GetFacebookActivePagesAPI = (pid, region = '') => {\n const axios = new DeskApiAxios({ pid, region });\n return axios.get('projects/facebook_pages?limit=100');\n};\n\nexport const facebookUpdatePageSettings: UpdateFacebookPageSettingsAPI = (pid, region = '', { pageId, payload }) => {\n const axios = new DeskApiAxios({ pid, region });\n return axios.patch(`facebook_pages/${pageId}`, payload);\n};\n\nexport const getProjectTwitterUsers: GetProjectTwitterUsersAPI = (pid, region = '') => {\n const axios = new DeskApiAxios({ pid, region });\n return axios.get('projects/twitter_users');\n};\n\nexport const getTwitterOauthToken: GetTwitterOauthTokenAPI = (pid, region = '') => {\n return cancellableAxios.get(`${getDeskURL(region)}/twitter/oauth/request_token/`, {\n headers: { pid },\n });\n};\n\nexport const subscribeTwitter: SubscribeTwitterAPI = (pid, region = '', payload) => {\n const axios = new DeskApiAxios({ pid, region });\n return axios.post('twitter_users', payload);\n};\n\nexport const patchTwitterUser: PatchTwitterUserAPI = (pid, region = '', { id, ...updates }) => {\n const axios = new DeskApiAxios({ pid, region });\n return axios.patch(`twitter_users/${id}/`, updates);\n};\n\nexport const getProjectInstagramAccounts: GetProjectInstagramAccountAPI = (pid, region = '') => {\n const axios = new DeskApiAxios({ pid, region });\n return axios.get('projects/instagram_users');\n};\n\nexport const instagramLoadAccounts: InstagramLoadAccountsAPI = (pid, region = '', { accessToken }) => {\n const axios = new DeskApiAxios({ pid, region });\n return axios.post('instagram_users/load_accounts/', { shortLivedUserAccessToken: accessToken });\n};\n\nexport const fetchInstagramUser: FetchInstagramUserAPI = (pid, region, { id }) => {\n const axios = new DeskApiAxios({ pid, region });\n return axios.get(`instagram_users/${id}/`);\n};\n\nexport const patchInstagramUser: PatchInstagramUserAPI = (\n pid,\n region,\n { instagramUserId, isCommentEnabled, isMessageEnabled, status },\n) => {\n const axios = new DeskApiAxios({ pid, region });\n return axios.patch(`instagram_users/${instagramUserId}/`, { isCommentEnabled, isMessageEnabled, status });\n};\n\nexport const createIframeApp: CreateIframeAppAPI = (pid, region, { title, url, width }) => {\n const axios = new DeskApiAxios({ pid, region });\n return axios.post('apps_iframes/', { title, url, width });\n};\n\nexport const fetchIframeAppDetail: FetchIframeAppAPI = (pid, region, { id }) => {\n const axios = new DeskApiAxios({ pid, region });\n return axios.get(`apps_iframes/${id}`);\n};\n\nexport const updateIframeApp: UpdateIframeAppAPI = (pid, region, { id, ...params }) => {\n const axios = new DeskApiAxios({ pid, region });\n return axios.patch(`apps_iframes/${id}`, params);\n};\n\nexport const createNexmoAccount: CreateNexmoAccountAPI = (pid, region, params) => {\n const axios = new DeskApiAxios({ pid, region });\n return axios.post('nexmo_accounts', params);\n};\n\nexport const updateNexmoAccount: UpdateNexmoAccountAPI = (pid, region, { id, ...params }) => {\n const axios = new DeskApiAxios({ pid, region });\n return axios.patch(`nexmo_accounts/${id}`, params);\n};\n\nexport const verifyNexmoApp: VerifyNexmoAppAPI = (pid, region, params) => {\n const axios = new DeskApiAxios({ pid, region });\n return axios.post('nexmo_accounts/verify', params);\n};\n\nexport const getProjectNexmoAccounts: GetProjectNexmoAccountsAPI = (pid, region) => {\n const axios = new DeskApiAxios({ pid, region });\n return axios.get('projects/subscribed_nexmo_accounts');\n};\n\nexport const getNexmoAccountDetail: GetNexmoAccountDetailAPI = (pid, region, { id }) => {\n const axios = new DeskApiAxios({ pid, region });\n return axios.get(`nexmo_accounts/${id}`);\n};\n","import axios from 'axios';\n\nimport { browserRouter } from '@/browserRouter';\nimport createAsyncThunk from '@/redux/createAsyncThunk';\nimport { selectApplicationData } from '@core/redux/selectors/applicationState';\nimport {\n facebookActivePages,\n facebookLoadPages,\n facebookSubscribe,\n facebookUnsubscribe,\n facebookUpdatePageSettings,\n} from '@desk/api/integrations';\nimport { toast } from '@feather/components/notification';\nimport getErrorMessage from '@utils/getErrorMessage';\nimport logException from '@utils/logException';\nimport toastBadRequestWarning from '@utils/toastBadRequestWarning';\n\nimport { selectDeskProject } from '../selectors/desk';\n\ntype FacebookPagePayload = { facebookPage: FacebookPage };\n\nexport const IntegrationsActions = {\n facebookAddPages: createAsyncThunk<\n { facebookPages: FacebookPage[] },\n FacebookLoadPagesPayload & { onSuccessNavigateTo?: string }\n >('desk/integrations/facebookAddPages', async (payload, { getState, rejectWithValue }) => {\n const { region } = selectApplicationData(getState());\n const { pid } = selectDeskProject(getState());\n const { accessToken, onSuccessNavigateTo } = payload;\n\n try {\n const { data } = await facebookLoadPages(pid, region, { accessToken });\n\n if (data.length === 0) {\n toast.warning({ message: 'No page loaded.' });\n return { facebookPages: data };\n }\n const results = await Promise.all(data.map((page) => facebookSubscribe(pid, region, { page_id: page.pageId })));\n const facebookPages = results.map((res) => res.data);\n onSuccessNavigateTo && browserRouter.navigate(onSuccessNavigateTo);\n toast.success({\n message: window.intl.formatMessage({ id: 'desk.settings.integration.facebook.noti.add.success' }),\n });\n return { facebookPages };\n } catch (error) {\n if (axios.isAxiosError(error)) {\n toastBadRequestWarning(error);\n return rejectWithValue(error);\n }\n\n logException(error);\n return rejectWithValue(error);\n }\n }),\n\n facebookUnsubscribe: createAsyncThunk<{ facebookPage: FacebookPage }, FacebookPagePayload>(\n 'desk/integrations/facebookUnsubscribe',\n async (payload, { getState, rejectWithValue }) => {\n const { region } = selectApplicationData(getState());\n const { pid } = selectDeskProject(getState());\n\n try {\n const { data } = await facebookUnsubscribe(pid, region, { page_id: payload.facebookPage.pageId });\n\n toast.success({\n message: window.intl.formatMessage({ id: 'desk.settings.integration.facebook.noti.remove.success' }),\n });\n return { facebookPage: data };\n } catch (error) {\n if (axios.isAxiosError(error)) {\n toastBadRequestWarning(error);\n return rejectWithValue(error || '');\n }\n\n logException(error);\n return rejectWithValue(error);\n }\n },\n ),\n\n facebookActivePages: createAsyncThunk<{ facebookPages: FacebookPage[] }, void, { rejectValue: string | null }>(\n 'desk/integrations/facebookActivePages',\n async (_, { getState, rejectWithValue }) => {\n const { region } = selectApplicationData(getState());\n const { pid } = selectDeskProject(getState());\n\n try {\n const { data } = await facebookActivePages(pid, region);\n\n return { facebookPages: data.results };\n } catch (error) {\n if (axios.isAxiosError(error)) {\n return rejectWithValue(getErrorMessage(error));\n }\n\n logException(error);\n return rejectWithValue(getErrorMessage(error));\n }\n },\n ),\n\n facebookUpdatePageSettings: createAsyncThunk<{ facebookPage: FacebookPage }, FacebookPagePayload>(\n 'desk/integrations/facebookUpdatePageSettings',\n async (payload, { getState, rejectWithValue }) => {\n const { region } = selectApplicationData(getState());\n const { pid } = selectDeskProject(getState());\n\n try {\n const { data } = await facebookUpdatePageSettings(pid, region, {\n pageId: payload.facebookPage.pageId,\n payload: {\n isConversationEnabled: payload.facebookPage.isConversationEnabled,\n isFeedEnabled: payload.facebookPage.isFeedEnabled,\n },\n });\n\n browserRouter.navigate(window.location.pathname.substring(0, window.location.pathname.lastIndexOf('/')));\n toast.success({\n message: window.intl.formatMessage({ id: 'desk.settings.integration.facebook.noti.update.success' }),\n });\n return { facebookPage: data };\n } catch (error) {\n if (axios.isAxiosError(error)) {\n toastBadRequestWarning(error);\n return rejectWithValue(error || '');\n }\n\n logException(error);\n return rejectWithValue(error);\n }\n },\n ),\n};\n","import { createReducer } from '@reduxjs/toolkit';\n\nimport { IntegrationsActions } from '@desk/redux/actions/integrations';\n\nimport { DeskActions } from '../actions/desk';\n\ninterface IntegrationsState {\n isAddingFacebookPages: boolean;\n isSubscribingFacebookPages: boolean;\n isUnsubscribingFacebookPage: boolean;\n loadedFacebookPages: FacebookPage[];\n fetchFacebookActivePages: {\n isFetching: boolean;\n error: string | null;\n };\n facebookPages: FacebookPage[];\n isUpdatingFacebookPageSettings: boolean;\n}\n\nconst initialState: IntegrationsState = {\n isAddingFacebookPages: false,\n isSubscribingFacebookPages: false,\n isUnsubscribingFacebookPage: false,\n loadedFacebookPages: [],\n fetchFacebookActivePages: { isFetching: false, error: null },\n facebookPages: [],\n isUpdatingFacebookPageSettings: false,\n};\n\nexport const integrationsReducer = createReducer(initialState, (builder) => {\n // IntegrationsActions\n builder\n .addCase(IntegrationsActions.facebookAddPages.pending, (state) => {\n state.isAddingFacebookPages = true;\n })\n .addCase(IntegrationsActions.facebookAddPages.fulfilled, (state, { payload }) => {\n const currentFacebookPageIds = state.facebookPages.map((page) => page.pageId);\n const newFacebookPages = payload.facebookPages.filter((page) => !currentFacebookPageIds.includes(page.pageId));\n state.isAddingFacebookPages = false;\n state.loadedFacebookPages = [];\n state.facebookPages.push(...newFacebookPages);\n })\n .addCase(IntegrationsActions.facebookAddPages.rejected, (state) => {\n state.isAddingFacebookPages = false;\n })\n .addCase(IntegrationsActions.facebookUnsubscribe.pending, (state) => {\n state.isUnsubscribingFacebookPage = true;\n })\n .addCase(IntegrationsActions.facebookUnsubscribe.fulfilled, (state, { payload }) => {\n state.isUnsubscribingFacebookPage = false;\n state.facebookPages = state.facebookPages.filter((page) => {\n return page.pageId !== payload.facebookPage.pageId;\n });\n })\n .addCase(IntegrationsActions.facebookUnsubscribe.rejected, (state) => {\n state.isUnsubscribingFacebookPage = false;\n })\n .addCase(IntegrationsActions.facebookActivePages.pending, (state) => {\n state.fetchFacebookActivePages.isFetching = true;\n state.fetchFacebookActivePages.error = null;\n })\n .addCase(IntegrationsActions.facebookActivePages.fulfilled, (state, { payload }) => {\n state.facebookPages = payload.facebookPages;\n state.fetchFacebookActivePages = { isFetching: false, error: null };\n })\n .addCase(IntegrationsActions.facebookActivePages.rejected, (state, { payload }) => {\n state.fetchFacebookActivePages = { isFetching: false, error: payload ?? null };\n })\n .addCase(IntegrationsActions.facebookUpdatePageSettings.pending, (state) => {\n state.isUpdatingFacebookPageSettings = true;\n })\n .addCase(IntegrationsActions.facebookUpdatePageSettings.fulfilled, (state, { payload }) => {\n state.isUpdatingFacebookPageSettings = false;\n state.facebookPages = state.facebookPages.map((page) => {\n if (page.pageId === payload.facebookPage.pageId) {\n return payload.facebookPage;\n }\n return page;\n });\n })\n .addCase(IntegrationsActions.facebookUpdatePageSettings.rejected, (state) => {\n state.isUpdatingFacebookPageSettings = false;\n });\n\n // Other actions\n builder.addCase(DeskActions.resetDesk, () => initialState);\n});\n","import { AgentConnection, SortOrder, TicketStatus } from '@constants';\nimport { AgentActivationStatusValue } from '@constants/desk';\nimport { TicketPriority } from '@constants/desk';\nimport { cssVariables } from '@feather';\n\nexport const getTicketStatus2 = (ticketStatus: TicketStatus) => {\n const allTicketStatus = [\n TicketStatus.PENDING,\n TicketStatus.ACTIVE,\n TicketStatus.IDLE,\n TicketStatus.WIP,\n TicketStatus.CLOSED,\n ];\n switch (ticketStatus) {\n case TicketStatus.ALL: {\n return allTicketStatus;\n }\n\n default:\n return ticketStatus;\n }\n};\n\nexport const getColorByConnection = (connection) => {\n switch (connection) {\n case AgentConnection.ONLINE:\n return cssVariables('green-5');\n\n case AgentConnection.OFFLINE:\n return cssVariables('neutral-5');\n\n case AgentConnection.AWAY:\n return cssVariables('orange-6');\n\n default:\n return cssVariables('neutral-10');\n }\n};\n\nexport const getTicketStatusLabelKey = (ticketStatus: Ticket['status2']) => {\n switch (ticketStatus) {\n case TicketStatus.PENDING:\n return 'ui.ticketStatus.pending';\n case TicketStatus.ACTIVE:\n return 'ui.ticketStatus.active';\n case TicketStatus.IDLE:\n return 'ui.ticketStatus.idle';\n case TicketStatus.WIP:\n return 'ui.ticketStatus.wip';\n case TicketStatus.CLOSED:\n return 'ui.ticketStatus.closed';\n case TicketStatus.PROACTIVE:\n return 'ui.ticketStatus.proactive';\n default:\n return 'ui.ticketStatus.init';\n }\n};\n\nexport const getTicketPriorityLabelKey = (priority: Priority) => {\n switch (priority) {\n case TicketPriority.URGENT:\n return 'ui.priority.urgent' as const;\n case TicketPriority.HIGH:\n return 'ui.priority.high' as const;\n case TicketPriority.MEDIUM:\n return 'ui.priority.medium' as const;\n case TicketPriority.LOW:\n return 'ui.priority.low' as const;\n default:\n return 'ui.priority.unknown' as const;\n }\n};\n\nexport const getAgentStatusLabelKey = (status: AgentActivationStatusValue) => {\n switch (status) {\n case AgentActivationStatusValue.ACTIVE:\n return 'desk.agent.status.label.active';\n case AgentActivationStatusValue.PAUSED:\n return 'desk.agent.status.label.paused';\n case AgentActivationStatusValue.PENDING:\n return 'desk.agent.status.label.pending';\n case AgentActivationStatusValue.INACTIVE:\n return 'desk.agent.status.label.inactive';\n case AgentActivationStatusValue.DELETED:\n default:\n return 'desk.agent.status.label.deleted';\n }\n};\n\nexport const getIsDefaultTeam = (key: AgentGroup['key']) => {\n // The team with the \"null\" team key is default team\n return key == null;\n};\n\nexport const sortToDefaultTeamFirst = (x: AgentGroup<'listItem'>, y: AgentGroup<'listItem'>) => {\n if (getIsDefaultTeam(x.key)) {\n return -1;\n }\n if (getIsDefaultTeam(y.key)) {\n return 1;\n }\n return 0;\n};\n\nexport const getGeneralizedTicketChannelType = (channelType: TicketChannelType) => {\n switch (channelType) {\n case 'FACEBOOK_CONVERSATION':\n case 'FACEBOOK_FEED':\n return 'facebook';\n case 'TWITTER_DIRECT_MESSAGE_EVENT':\n case 'TWITTER_STATUS':\n return 'twitter';\n case 'INSTAGRAM_COMMENT':\n return 'instagram';\n case 'INSTAGRAM_MESSAGE':\n return 'instagram';\n case 'WHATSAPP_MESSAGE':\n return 'whatsapp';\n default:\n return 'sendbird';\n }\n};\n\nexport const getSorterParams = (sorter: string, sortOrder: SortOrder) =>\n sortOrder === SortOrder.ASCEND ? sorter : `-${sorter}`;\n\nexport const getTicketURL = (ticketId: Ticket['id'], isAdmin: boolean) => {\n const appId = window.location.pathname.split('/')[1];\n return isAdmin\n ? `${window.location.origin}/${appId}/desk/tickets/${ticketId}`\n : `${window.location.origin}/${appId}/desk/conversation/${ticketId}`;\n};\n\nexport const createGoogleMapLink = (lat: number, long: number) =>\n `https://www.google.com/maps/search/?api=1&query=${lat}%2C${long}`;\n\nexport const attachPlusSignToPhoneNumber = (number: string | number) => {\n // Already attached\n if (typeof number === 'string' && number.charAt(0) === '+') return number;\n return `+${number}`;\n};\n\nexport const checkIsMediaTypeWAMessageContent = ({ contentType }: WhatsAppMessageType) =>\n contentType === 'file' || contentType === 'image' || contentType === 'audio' || contentType === 'video';\n\nexport const getWorkingHourVerticalLineColor = (index: number) =>\n index === 0\n ? cssVariables('red-5') // Primary color\n : cssVariables('blue-6'); // Secondary color\n\nexport const getTicketLastMessagePropertiesFromMessage = (\n message: SendbirdChatMessage.AllMessage,\n): Pick => {\n const properties = {\n lastMessage: message.isFileMessage() ? message.name : message.message,\n lastMessageAt: new Date(message.createdAt).toString(),\n };\n\n return properties;\n};\n\nexport const isTicketMustBeFetchedUsingPlatformAPI = (ticket: Ticket, currentDeskAgentId: number) =>\n ticket.status2 === TicketStatus.WIP ||\n ticket.status2 === TicketStatus.PENDING ||\n ticket.status2 === TicketStatus.CLOSED ||\n ticket.recentAssignment?.agent.id !== currentDeskAgentId;\n","import { createAction } from '@reduxjs/toolkit';\nimport axios from 'axios';\n\nimport createAsyncThunk from '@/redux/createAsyncThunk';\nimport { selectApplicationData } from '@core/redux/selectors/applicationState';\nimport {\n fetchFacebookFeeds,\n fetchFacebookMessages,\n fetchInstagramComments,\n fetchInstagramMessages,\n fetchTwitterDirectMessageEvents,\n fetchTwitterStatuses,\n fetchWhatsAppMessages,\n} from '@desk/api/conversation';\nimport { fetchTicketMessages } from '@desk/api/ticketDetail';\nimport { fetchTicket } from '@desk/api/tickets';\nimport { getGeneralizedTicketChannelType } from '@desk/utils';\nimport {\n convertTwitterStatusTicketToMergedTwitterStatus,\n parseTwitterDirectMessageEventAttachments,\n} from '@desk/utils/twitterUtils';\nimport logException from '@utils/logException';\nimport toastBadRequestWarning from '@utils/toastBadRequestWarning';\n\nimport { selectDeskProject } from '../selectors/desk';\n\ntype FetchTicketDetailMessagesType = 'initial' | 'prev' | 'next';\n\nexport const TicketDetailActions = {\n fetchTicketDetailTicket: createAsyncThunk(\n 'desk/ticketDetail/fetchTicketDetailTicket',\n async (payload, { getState, rejectWithValue }) => {\n const { region } = selectApplicationData(getState());\n const { pid } = selectDeskProject(getState());\n\n try {\n const { data } = await fetchTicket(pid, region, { ticketId: payload });\n\n return data;\n } catch (error) {\n if (axios.isAxiosError(error)) {\n toastBadRequestWarning(error);\n return rejectWithValue(error);\n }\n\n logException(error);\n return rejectWithValue(error);\n }\n },\n ),\n\n fetchTicketDetailHeader: createAsyncThunk(\n 'desk/ticketDetail/fetchTicketDetailHeader',\n async (payload, { getState, rejectWithValue }) => {\n const { region } = selectApplicationData(getState());\n const { pid } = selectDeskProject(getState());\n\n try {\n const { data } = await fetchTicket(pid, region, { ticketId: payload });\n\n return data;\n } catch (error) {\n if (axios.isAxiosError(error)) {\n toastBadRequestWarning(error);\n return rejectWithValue(error);\n }\n\n logException(error);\n return rejectWithValue(error);\n }\n },\n ),\n\n fetchTicketDetailMessages: createAsyncThunk<\n {\n types: FetchTicketDetailMessagesType;\n messages: PlatformAPITicketMessage[];\n initialOrNextFetchedTimestamp?: number;\n },\n {\n channelType: Ticket['channelType'];\n types: FetchTicketDetailMessagesType;\n ticketId: number;\n channelUrl?: Ticket['channelUrl'];\n messageTs: number;\n prevLimit: number;\n nextLimit: number;\n }\n >(\n 'desk/ticketDetail/fetchTicketDetailMessages',\n async (payload, { getState, rejectWithValue }) => {\n const { region } = selectApplicationData(getState());\n const { pid } = selectDeskProject(getState());\n const { channelType, ticketId, messageTs, prevLimit = 0, nextLimit = 0 } = payload;\n\n const getResultReturnValue = (messages: PlatformAPITicketMessage[]) => {\n const currentMessages = getState().ticketDetail.messages;\n if (payload.types === 'prev') {\n return {\n types: payload.types,\n messages: messages.concat(currentMessages),\n };\n }\n if (payload.types === 'next') {\n return {\n types: payload.types,\n messages: messages.length > 0 ? currentMessages.concat(messages) : currentMessages,\n /**\n * Updating `initialOrNextFetchedTimestamp` will scroll the messages to the bottom.\n * That's why we pass undefined to `initialOrNextFetchedTimestamp` below for empty messages.\n */\n initialOrNextFetchedTimestamp: messages.length > 0 ? Date.now() : undefined,\n };\n }\n return {\n types: payload.types,\n messages,\n initialOrNextFetchedTimestamp: Date.now(),\n };\n };\n\n try {\n switch (channelType) {\n case 'FACEBOOK_CONVERSATION': {\n const params = `prevLimit=${prevLimit}&nextLimit=${nextLimit}&ts=${messageTs}`;\n const { data } = await fetchFacebookMessages(pid, region, { ticketId, params });\n\n const messages = data.results;\n return getResultReturnValue(messages);\n }\n case 'FACEBOOK_FEED': {\n const params = `prevLimit=${prevLimit}&nextLimit=${nextLimit}&ts=${messageTs}`;\n const { data } = await fetchFacebookFeeds(pid, region, { ticketId, params });\n\n const messages = data.results;\n return getResultReturnValue(messages);\n }\n case 'TWITTER_DIRECT_MESSAGE_EVENT': {\n const params = { prevLimit, nextLimit, ts: messageTs };\n const { data } = await fetchTwitterDirectMessageEvents(pid, region, { ticketId, params });\n\n const messages = data.results.map(parseTwitterDirectMessageEventAttachments);\n return getResultReturnValue(messages);\n }\n case 'TWITTER_STATUS': {\n const params = { prevLimit, nextLimit, ts: messageTs };\n const { data } = await fetchTwitterStatuses(pid, region, { ticketId, params });\n\n const messages = data.results.map(convertTwitterStatusTicketToMergedTwitterStatus);\n return getResultReturnValue(messages);\n }\n case 'INSTAGRAM_COMMENT': {\n const params = { prevLimit, nextLimit, ts: messageTs };\n const { data } = await fetchInstagramComments(pid, region, { ticketId, params });\n\n const messages = data.results;\n return getResultReturnValue(messages);\n }\n case 'INSTAGRAM_MESSAGE': {\n const params = { prevLimit, nextLimit, ts: messageTs };\n const { data } = await fetchInstagramMessages(pid, region, { ticketId, params });\n\n const messages = data.results;\n return getResultReturnValue(messages);\n }\n case 'WHATSAPP_MESSAGE': {\n const params = { prevLimit, nextLimit, ts: messageTs };\n const { data } = await fetchWhatsAppMessages(pid, region, { ticketId, params });\n\n const messages = data.results;\n return getResultReturnValue(messages);\n }\n case 'SENDBIRD_JAVASCRIPT':\n case 'SENDBIRD_IOS':\n case 'SENDBIRD_ANDROID':\n case 'SENDBIRD':\n default: {\n const { data } = await fetchTicketMessages(pid, region, { ticketId, messageTs, prevLimit, nextLimit });\n\n const { messages } = data;\n return getResultReturnValue(messages);\n }\n }\n } catch (error) {\n if (axios.isAxiosError(error)) {\n toastBadRequestWarning(error);\n return rejectWithValue(error);\n }\n\n logException(error);\n return rejectWithValue(error);\n }\n },\n {\n condition: (arg, { getState }) => {\n return (\n (getGeneralizedTicketChannelType(arg.channelType) !== 'sendbird' || !!arg.channelUrl) &&\n getState().ticketDetail.ticket?.id === arg.ticketId\n );\n },\n },\n ),\n\n ticketDetailUpdated: createAction>('desk/ticketDetail/ticketDetailUpdated'),\n ticketDetailSendbirdAPIMessageUpdated: createAction(\n 'desk/ticketDetail/ticketDetailSendbirdAPIMessageUpdated',\n ),\n ticketDetailReset: createAction('desk/ticketDetail/ticketDetailReset'),\n};\n","import { createReducer } from '@reduxjs/toolkit';\n\nimport { AuthenticationActions } from '@common/redux/actions/authentication';\nimport { TicketDetailActions } from '@desk/redux/actions/ticketDetail';\n\ninterface TicketDetailState {\n isFetching: boolean;\n isFetchingMessages: boolean;\n ticket?: Ticket;\n messages: PlatformAPITicketMessage[];\n initialOrNextFetchedTimestamp?: number;\n}\n\nconst initialState: TicketDetailState = {\n isFetching: false,\n isFetchingMessages: false,\n messages: [],\n ticket: undefined,\n};\n\nexport const ticketDetailReducer = createReducer(initialState, (builder) => {\n // TicketDetailActions\n builder\n .addCase(TicketDetailActions.fetchTicketDetailTicket.pending, (state, { payload }) => {\n state.isFetching = true;\n if (state.ticket && payload !== state.ticket.id) {\n state.messages = [];\n }\n })\n .addCase(TicketDetailActions.fetchTicketDetailHeader.pending, (state) => {\n state.isFetching = true;\n })\n .addCase(TicketDetailActions.fetchTicketDetailTicket.fulfilled, (state, { payload }) => {\n state.isFetching = false;\n state.ticket = payload;\n })\n .addCase(TicketDetailActions.fetchTicketDetailHeader.fulfilled, (state, { payload }) => {\n if (state.ticket) {\n state.isFetching = false;\n state.ticket.group = payload.group;\n state.ticket.recentAssignment = payload.recentAssignment;\n state.ticket.status = payload.status;\n state.ticket.status2 = payload.status2;\n state.ticket.closeStatus = payload.closeStatus;\n } else {\n return initialState;\n }\n })\n .addCase(TicketDetailActions.fetchTicketDetailMessages.pending, (state, { meta }) => {\n state.isFetchingMessages = meta.arg.types === 'initial';\n })\n .addCase(TicketDetailActions.fetchTicketDetailMessages.fulfilled, (state, { payload }) => {\n const { messages, initialOrNextFetchedTimestamp } = payload;\n state.isFetchingMessages = false;\n state.messages = messages || state.messages;\n if (initialOrNextFetchedTimestamp) {\n state.initialOrNextFetchedTimestamp = initialOrNextFetchedTimestamp;\n }\n })\n .addCase(TicketDetailActions.fetchTicketDetailMessages.rejected, (state) => {\n state.isFetchingMessages = false;\n })\n .addCase(TicketDetailActions.ticketDetailSendbirdAPIMessageUpdated, (state, { payload }) => {\n state.messages = state.messages.map((message: SendbirdChatPlatformAPI.AllMessageType) => {\n if (message.message_id === payload.message_id) {\n return payload;\n }\n return message;\n });\n })\n .addCase(TicketDetailActions.ticketDetailUpdated, (state, { payload }) => {\n if (state.ticket) {\n state.ticket = { ...state.ticket, ...payload };\n }\n })\n .addCase(TicketDetailActions.ticketDetailReset, () => initialState);\n\n // Other actions\n builder.addCase(AuthenticationActions.unauthenticated, () => initialState);\n});\n","import { createAction } from '@reduxjs/toolkit';\nimport axios from 'axios';\n\nimport createAsyncThunk from '@/redux/createAsyncThunk';\nimport { selectApplicationData } from '@core/redux/selectors/applicationState';\nimport {\n fetchFacebookFeeds,\n fetchFacebookMessages,\n fetchInstagramComments,\n fetchInstagramMessages,\n fetchTwitterDirectMessageEvents,\n fetchTwitterStatuses,\n fetchWhatsAppMessages,\n} from '@desk/api/conversation';\nimport { fetchTicketMessages } from '@desk/api/ticketDetail';\nimport { getGeneralizedTicketChannelType } from '@desk/utils';\nimport {\n convertTwitterStatusTicketToMergedTwitterStatus,\n parseTwitterDirectMessageEventAttachments,\n} from '@desk/utils/twitterUtils';\nimport logException from '@utils/logException';\nimport toastBadRequestWarning from '@utils/toastBadRequestWarning';\n\nimport { selectDeskProject } from '../selectors/desk';\n\ntype FetchTicketHistoryMessagesType = 'initial' | 'prev' | 'next';\n\nexport const TicketHistoryActions = {\n fetchTicketHistoryMessages: createAsyncThunk<\n { types: FetchTicketHistoryMessagesType; messages: PlatformAPITicketMessage[] },\n {\n channelType: Ticket['channelType'];\n types: FetchTicketHistoryMessagesType;\n ticketId: number;\n messageTs: number;\n prevLimit: number;\n nextLimit: number;\n channelUrl?: string;\n }\n >(\n 'desk/ticketHistory/fetchTicketHistoryMessages',\n async (payload, { getState, rejectWithValue }) => {\n const { region } = selectApplicationData(getState());\n const { pid } = selectDeskProject(getState());\n const { ticketId, channelType, messageTs, prevLimit = 0, nextLimit = 0 } = payload;\n\n const getResultReturnValue = (messages: PlatformAPITicketMessage[]) => {\n const currentMessages = getState().ticketHistory.messages;\n if (payload.types === 'prev') {\n return {\n types: payload.types,\n messages: messages.concat(currentMessages),\n };\n }\n if (payload.types === 'next') {\n return {\n types: payload.types,\n messages: currentMessages.concat(messages),\n };\n }\n return {\n types: payload.types,\n messages,\n };\n };\n\n try {\n switch (channelType) {\n case 'FACEBOOK_CONVERSATION': {\n const params = `prevLimit=${prevLimit}&nextLimit=${nextLimit}&ts=${messageTs}`;\n const { data } = await fetchFacebookMessages(pid, region, { ticketId: payload.ticketId, params });\n\n const messages = data.results;\n return getResultReturnValue(messages);\n }\n case 'FACEBOOK_FEED': {\n const params = `prevLimit=${prevLimit}&nextLimit=${nextLimit}&ts=${messageTs}`;\n const { data } = await fetchFacebookFeeds(pid, region, { ticketId: payload.ticketId, params });\n\n const messages = data.results;\n return getResultReturnValue(messages);\n }\n case 'TWITTER_DIRECT_MESSAGE_EVENT': {\n const params = { prevLimit, nextLimit, ts: messageTs };\n const { data } = await fetchTwitterDirectMessageEvents(pid, region, { ticketId: payload.ticketId, params });\n\n const messages = data.results.map(parseTwitterDirectMessageEventAttachments);\n return getResultReturnValue(messages);\n }\n case 'TWITTER_STATUS': {\n const params = { prevLimit, nextLimit, ts: messageTs };\n const { data } = await fetchTwitterStatuses(pid, region, { ticketId: payload.ticketId, params });\n\n const messages = data.results.map(convertTwitterStatusTicketToMergedTwitterStatus);\n return getResultReturnValue(messages);\n }\n case 'INSTAGRAM_COMMENT': {\n const params = { prevLimit, nextLimit, ts: messageTs };\n const { data } = await fetchInstagramComments(pid, region, { ticketId: payload.ticketId, params });\n\n const messages = data.results;\n return getResultReturnValue(messages);\n }\n case 'INSTAGRAM_MESSAGE': {\n const params = { prevLimit, nextLimit, ts: messageTs };\n const { data } = await fetchInstagramMessages(pid, region, { ticketId: payload.ticketId, params });\n\n const messages = data.results;\n return getResultReturnValue(messages);\n }\n case 'WHATSAPP_MESSAGE': {\n const params = { prevLimit, nextLimit, ts: messageTs };\n const { data } = await fetchWhatsAppMessages(pid, region, { ticketId: payload.ticketId, params });\n\n const messages = data.results;\n return getResultReturnValue(messages);\n }\n case 'SENDBIRD_JAVASCRIPT':\n case 'SENDBIRD_IOS':\n case 'SENDBIRD_ANDROID':\n case 'SENDBIRD':\n default: {\n const { data } = await fetchTicketMessages(pid, region, {\n messageTs,\n prevLimit,\n nextLimit,\n ticketId,\n });\n const { messages } = data;\n return getResultReturnValue(messages);\n }\n }\n } catch (error) {\n if (axios.isAxiosError(error)) {\n toastBadRequestWarning(error);\n return rejectWithValue(error || '');\n }\n\n logException(error);\n return rejectWithValue(error);\n }\n },\n { condition: (arg) => getGeneralizedTicketChannelType(arg.channelType) !== 'sendbird' || !!arg.channelUrl },\n ),\n\n currentTicketHistorySet: createAction('desk/ticketHistory/currentTicketHistorySet'),\n currentTicketHistoryReset: createAction('desk/ticketHistory/currentTicketHistoryReset'),\n};\n","import { createReducer } from '@reduxjs/toolkit';\n\nimport { AuthenticationActions } from '@common/redux/actions/authentication';\nimport { TicketHistoryActions } from '@desk/redux/actions/ticketHistory';\n\nexport interface TicketHistoryState {\n isFetching: boolean;\n isFetchingInitialMessages: boolean;\n isFetchingPrevMessages: boolean;\n current: Ticket | null;\n tickets: Ticket[];\n messages: PlatformAPITicketMessage[];\n}\n\nconst initialState: TicketHistoryState = {\n isFetching: false,\n isFetchingInitialMessages: false,\n isFetchingPrevMessages: false,\n tickets: [],\n current: null,\n messages: [],\n};\n\nexport const ticketHistoryReducer = createReducer(initialState, (builder) => {\n // TicketHistoryActions\n builder\n .addCase(TicketHistoryActions.currentTicketHistorySet, (state, { payload }) => {\n state.current = payload;\n })\n .addCase(TicketHistoryActions.fetchTicketHistoryMessages.pending, (state, { meta }) => {\n state.isFetchingInitialMessages = meta.arg.types === 'initial';\n state.isFetchingPrevMessages = meta.arg.types === 'prev';\n })\n .addCase(TicketHistoryActions.fetchTicketHistoryMessages.fulfilled, (state, { payload }) => {\n if (payload) {\n state.isFetchingInitialMessages = false;\n state.isFetchingPrevMessages = false;\n state.messages = payload.messages;\n }\n })\n .addCase(TicketHistoryActions.fetchTicketHistoryMessages.rejected, (state) => {\n state.isFetchingInitialMessages = false;\n state.isFetchingPrevMessages = false;\n })\n .addCase(TicketHistoryActions.currentTicketHistoryReset, (state) => {\n state.current = null;\n state.messages = [];\n });\n\n // Other actions\n builder.addCase(AuthenticationActions.unauthenticated, () => initialState);\n});\n","import type { ReactNode } from 'react';\n\nimport { createAction } from '@reduxjs/toolkit';\nimport axios from 'axios';\n\nimport createAsyncThunk from '@/redux/createAsyncThunk';\nimport { DialogsActions } from '@common/redux/actions/dialogs';\nimport { selectApplicationData } from '@core/redux/selectors/applicationState';\nimport { updateTicketAssignment } from '@desk/api/conversation';\nimport {\n addToWIP,\n assignTicketToAgentGroup,\n closeTicket,\n forceAssignTicket,\n reopenTicket,\n transferTicket,\n} from '@desk/api/tickets';\nimport { toast } from '@feather/components/notification';\nimport logException from '@utils/logException';\nimport toastBadRequestWarning from '@utils/toastBadRequestWarning';\n\nimport { selectDeskProject } from '../selectors/desk';\nimport { TicketDetailActions } from './ticketDetail';\n\nexport const TicketsActions = {\n forceAssignTicket: createAsyncThunk<\n Ticket,\n { payload: ForceAssignTicketPayload; options: { origin: DeskOrigin; alert?: Exclude } }\n >('desk/tickets/forceAssignTicket', async (payload, { dispatch, getState, rejectWithValue }) => {\n const { region } = selectApplicationData(getState());\n const { pid } = selectDeskProject(getState());\n\n try {\n const { data } = await forceAssignTicket(pid, region, {\n ticketId: payload.payload.ticketId,\n agentId: payload.payload.agentId,\n });\n\n dispatch(DialogsActions.hideDialog());\n if (payload.options?.origin === 'tickets' && payload.options.alert) {\n toast.success({ message: payload.options.alert });\n } else {\n dispatch(TicketDetailActions.fetchTicketDetailTicket(payload.payload.ticketId));\n }\n return data;\n } catch (error) {\n if (axios.isAxiosError(error)) {\n toastBadRequestWarning(error);\n return rejectWithValue(error || '');\n }\n\n logException(error);\n return rejectWithValue(error);\n }\n }),\n\n transferTicket: createAsyncThunk<\n Assignment,\n TransferTicketPayload & { ticket: Ticket; options: { origin: DeskOrigin; alert?: Exclude } }\n >('desk/tickets/transferTicket', async (payload, { dispatch, getState, rejectWithValue }) => {\n const { region } = selectApplicationData(getState());\n const { pid } = selectDeskProject(getState());\n\n try {\n dispatch(DialogsActions.setIsFetching(true));\n const { data } = await transferTicket(pid, region, { payload: payload.payload });\n\n dispatch(DialogsActions.hideDialog());\n if (payload.options?.origin === 'tickets' && payload.options.alert) {\n toast.success({ message: payload.options.alert });\n }\n if (payload.options?.origin !== 'conversation') {\n dispatch(TicketDetailActions.fetchTicketDetailTicket(payload.ticket.id));\n }\n return data.toAssignment;\n } catch (error) {\n if (axios.isAxiosError(error)) {\n toastBadRequestWarning(error);\n return rejectWithValue(error || '');\n }\n\n logException(error);\n return rejectWithValue(error);\n } finally {\n dispatch(DialogsActions.setIsFetching(false));\n }\n }),\n\n reopenTicket: createAsyncThunk<\n Ticket,\n { payload: ReopenTicketPayload; options: { alert?: Exclude } }\n >('desk/tickets/reopenTicket', async (payload, { dispatch, getState, rejectWithValue }) => {\n const { region } = selectApplicationData(getState());\n const { pid } = selectDeskProject(getState());\n\n try {\n dispatch(DialogsActions.setIsFetching(true));\n const { data } = await reopenTicket(pid, region, { ticketId: payload.payload.ticketId });\n\n dispatch(DialogsActions.hideDialog());\n if (payload.options.alert) {\n toast.success({ message: payload.options.alert });\n }\n dispatch(TicketDetailActions.fetchTicketDetailTicket(payload.payload.ticketId));\n return data;\n } catch (error) {\n if (axios.isAxiosError(error)) {\n toastBadRequestWarning(error);\n return rejectWithValue(error || '');\n }\n\n logException(error);\n return rejectWithValue(error);\n } finally {\n dispatch(DialogsActions.setIsFetching(false));\n }\n }),\n\n moveTicketToWIP: createAsyncThunk(\n 'desk/tickets/moveTicketToWIP',\n async (payload, { dispatch, getState, rejectWithValue }) => {\n const { region } = selectApplicationData(getState());\n const { pid } = selectDeskProject(getState());\n\n try {\n const { data } = await addToWIP(pid, region, payload);\n\n dispatch(TicketDetailActions.ticketDetailUpdated(data));\n } catch (error) {\n if (axios.isAxiosError(error)) {\n toastBadRequestWarning(error);\n return rejectWithValue(error || '');\n }\n\n logException(error);\n return rejectWithValue(error);\n }\n },\n ),\n\n moveTicketToIdle: createAsyncThunk(\n 'desk/tickets/moveTicketToIdle',\n async (payload, { getState, rejectWithValue }) => {\n const { region } = selectApplicationData(getState());\n const { pid } = selectDeskProject(getState());\n\n if (!payload.ticket.recentAssignment) {\n return rejectWithValue(`Undefined RecentAssignment: ${payload.ticket.channelName}`);\n }\n\n try {\n const { data } = await updateTicketAssignment(pid, region, {\n assignmentId: payload.ticket.recentAssignment.id,\n payload: { status: 'IDLE' },\n });\n\n return data;\n } catch (error) {\n if (axios.isAxiosError(error)) {\n toastBadRequestWarning(error);\n return rejectWithValue(error || '');\n }\n\n logException(error);\n return rejectWithValue(error);\n }\n },\n ),\n\n closeTicket: createAsyncThunk<\n Ticket,\n { payload: CloseTicketPayload; options: { origin: DeskOrigin; alert?: Exclude } }\n >('desk/tickets/closeTicket', async (payload, { dispatch, getState, rejectWithValue }) => {\n const { region } = selectApplicationData(getState());\n const { pid } = selectDeskProject(getState());\n\n try {\n const { data } = await closeTicket(pid, region, payload.payload);\n dispatch(DialogsActions.hideDialog());\n if (payload.options?.origin === 'tickets' && payload.options.alert) {\n toast.success({ message: payload.options.alert });\n }\n if (payload.options?.origin !== 'conversation') {\n dispatch(TicketDetailActions.fetchTicketDetailTicket(payload.payload.ticketId));\n }\n return data;\n } catch (error) {\n if (axios.isAxiosError(error)) {\n toastBadRequestWarning(error);\n return rejectWithValue(error);\n }\n\n logException(error);\n return rejectWithValue(error);\n }\n }),\n\n assignTicketToAgentGroup: createAsyncThunk<\n Ticket,\n { payload: AssignTicketToGroupPayload; options: { origin: DeskOrigin; alert?: Exclude } }\n >('desk/tickets/assignTicketToAgentGroup', async (payload, { dispatch, getState, rejectWithValue }) => {\n const { region } = selectApplicationData(getState());\n const { pid } = selectDeskProject(getState());\n\n try {\n dispatch(DialogsActions.setIsFetching(true));\n const { data } = await assignTicketToAgentGroup(pid, region, payload.payload);\n\n dispatch(DialogsActions.hideDialog());\n if (payload.options.alert) {\n toast.success({ message: payload.options.alert });\n }\n if (payload.options.origin !== 'conversation') {\n dispatch(TicketDetailActions.fetchTicketDetailTicket(payload.payload.ticketId));\n }\n return data;\n } catch (error) {\n if (axios.isAxiosError(error)) {\n toastBadRequestWarning(error);\n return rejectWithValue(error || '');\n }\n\n logException(error);\n return rejectWithValue(error);\n } finally {\n dispatch(DialogsActions.setIsFetching(false));\n }\n }),\n\n ticketsRefreshAutomaticSet: createAction('desk/tickets/ticketsRefreshAutomaticSet'),\n ticketsRefreshAutomaticItemSet: createAction<{ label: string; seconds: number }>(\n 'desk/tickets/ticketsRefreshAutomaticItemSet',\n ),\n};\n","import { createReducer, isAnyOf } from '@reduxjs/toolkit';\n\nimport { AuthenticationActions } from '@common/redux/actions/authentication';\nimport { TicketsActions } from '@desk/redux/actions/tickets';\n\nimport { DeskActions } from '../actions/desk';\n\nconst defaultRefreshItem = {\n label: '10 Seconds',\n seconds: 10,\n};\n\ninterface TicketsState {\n refresh: {\n isAutomatic: boolean;\n automaticItem: {\n label: string;\n seconds: number;\n };\n };\n}\n\nconst initialState: TicketsState = {\n refresh: {\n isAutomatic: false,\n automaticItem: defaultRefreshItem,\n },\n};\n\nexport const ticketsReducer = createReducer(initialState, (builder) => {\n // TicketsActions\n builder\n .addCase(TicketsActions.ticketsRefreshAutomaticSet, (state, { payload }) => {\n state.refresh.isAutomatic = payload;\n })\n .addCase(TicketsActions.ticketsRefreshAutomaticItemSet, (state, { payload }) => {\n state.refresh.automaticItem = payload;\n });\n\n // Other actions\n builder.addMatcher(isAnyOf(AuthenticationActions.unauthenticated, DeskActions.resetDesk), () => initialState);\n});\n","import { configureStore } from '@reduxjs/toolkit';\n\nimport { groupChannelsReducer } from '@chat/redux/reducers/groupChannels';\nimport { openChannelsReducer } from '@chat/redux/reducers/openChannels';\nimport { accountReducer } from '@common/redux/reducers/account';\nimport { applicationUpdateReducer } from '@common/redux/reducers/applicationUpdate';\nimport { authenticationReducer } from '@common/redux/reducers/authentication';\nimport { billingReducer } from '@common/redux/reducers/billing';\nimport { dialogsReducer } from '@common/redux/reducers/dialogs';\nimport { imagePreviewReducer } from '@common/redux/reducers/imagePreview';\nimport { lnbReducer } from '@common/redux/reducers/lnb';\nimport { organizationsReducer } from '@common/redux/reducers/organizations';\nimport { isProduction } from '@constants';\nimport { applicationStateReducer } from '@core/redux/reducers/applicationState';\nimport { settingsReducer } from '@core/redux/reducers/settings';\nimport { agentGroupsReducer } from '@desk/redux/reducers/agentGroups';\nimport { conversationReducer } from '@desk/redux/reducers/conversation';\nimport { deskReducer } from '@desk/redux/reducers/desk';\nimport { integrationsReducer } from '@desk/redux/reducers/integrations';\nimport { ticketDetailReducer } from '@desk/redux/reducers/ticketDetail';\nimport { ticketHistoryReducer } from '@desk/redux/reducers/ticketHistory';\nimport { ticketsReducer } from '@desk/redux/reducers/tickets';\n\nexport const store = configureStore({\n reducer: {\n // common\n auth: authenticationReducer,\n applicationUpdate: applicationUpdateReducer,\n dialogs: dialogsReducer,\n imagePreview: imagePreviewReducer,\n account: accountReducer,\n organizations: organizationsReducer,\n billing: billingReducer,\n lnb: lnbReducer,\n\n // core\n applicationState: applicationStateReducer,\n settings: settingsReducer,\n\n // chat\n openChannels: openChannelsReducer,\n groupChannels: groupChannelsReducer,\n\n // desk\n desk: deskReducer,\n ticketDetail: ticketDetailReducer,\n conversation: conversationReducer,\n ticketHistory: ticketHistoryReducer,\n tickets: ticketsReducer,\n agentGroups: agentGroupsReducer,\n integrations: integrationsReducer,\n },\n middleware: (getDefaultMiddleware) =>\n getDefaultMiddleware({\n immutableCheck: false,\n serializableCheck: false,\n actionCreatorCheck: false,\n }),\n devTools: !isProduction && {\n serialize: {\n replacer: (_, value: any) => {\n if (typeof value === 'object' && value !== null) {\n if (value instanceof Event) {\n return 'Event';\n }\n if ('_reactName' in value) {\n return `React Component: ${value._reactName}`;\n }\n if ('elementType' in value) {\n return `Element: ${value.elementType}`;\n }\n if (value.render) {\n return `Component: ${value.render.displayName}`;\n }\n if (value.$$typeof) {\n return value.$$typeof;\n }\n }\n return value;\n },\n },\n },\n});\n\nexport type RootState = ReturnType;\nexport type AppDispatch = typeof store.dispatch;\n","import type { FC } from 'react';\n\nimport { QueryClientProvider } from '@tanstack/react-query';\nimport 'intersection-observer';\nimport { createRoot } from 'react-dom/client';\nimport { Helmet } from 'react-helmet';\nimport { Provider } from 'react-redux';\nimport { RecoilRoot } from 'recoil';\nimport { install as installResizeObserver } from 'resize-observer';\n\n/**\n * @sbfe/notifications-template-preview-react must be imported before feather to\n * avoid TailwindCSS Preflight overriding feather styles (e.g. primary button\n * background color becoming white instead of purple.)\n */\nimport '@sbfe/notifications-template-preview-react/dist/main.css';\n\nimport { RouterProvider } from '@/router';\nimport { AuthorizationContextProvider } from '@authorization';\nimport { IconButton } from '@feather/components/button';\nimport { toast } from '@feather/components/notification';\nimport { FeatherProvider } from '@feather/theme/FeatherProvider';\nimport { GlobalStyles } from '@ui/styles';\nimport { FeatureFlagContextProvider } from '@utils/featureFlags';\nimport initializeSentry from '@utils/initializeSentry';\n\nimport { DesktopNotificationProvider } from './DesktopNotification';\nimport { SendbirdChatProvider } from './SendbirdChat';\nimport { browserRouter } from './browserRouter';\nimport './chartjsDefault';\nimport { ConnectedIntlProvider } from './intl';\nimport { queryClient } from './queryClient';\nimport { store } from './store';\n\nIconButton.setTooltipPortalId('portal_popup');\ntoast.rootElementID = 'portal_toast';\ninitializeSentry();\n\nconst container = document.getElementById('root');\nconst root = createRoot(container as Element);\n\nif (!root) throw new Error('Failed to find the root element');\n\nconst TypeFixedFeatherProvider = FeatherProvider as FC<{ children?: React.ReactNode }>;\n\nif (!('ResizeObserver' in window)) {\n installResizeObserver();\n}\n\nroot.render(\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n ,\n);\n"],"file":"entry.js"}