{"version":3,"sources":["webpack:///./src/offers/offerWebServices.ts","webpack:///./src/store/actions/loadBalance.ts","webpack:///./src/store/messaging/actions.ts","webpack:///./src/store/messaging/mutations.ts","webpack:///./src/store/messaging/getters.ts","webpack:///./src/store/messaging/index.ts","webpack:///./src/store/job-offers/actions.ts","webpack:///./src/store/job-offers/index.ts","webpack:///./src/store/index.ts","webpack:///./src/messaging/helpers.ts","webpack:///./src/serviceClients/userWebServices.ts","webpack:///./src/register/registerModel.ts","webpack:///./src/messaging/messagingWebServices.ts","webpack:///./src/router/index.ts","webpack:///./src/serviceClients/userStatusWebServices.ts","webpack:///./src/messaging/messagingHandlers.ts","webpack:///./src/panel/userPanelWebServices.ts","webpack:///./src/notifications/jobOfferNotifications.ts","webpack:///./src/notifications/messagesNotifications.ts","webpack:///./src/notifications/paymentRequestsNotifications.ts","webpack:///./src/notifications/videoCallNotifications.ts","webpack:///./src/notifications/index.ts"],"names":["url","urlInterests","JobOfferInterestStatus","getOffer","id","axios","get","getOfferList","addOffer","model","post","editOffer","put","deleteOffer","delete","getOfferInterests","sendOfferInterest","assistantId","data","acceptOfferInterest","offerId","interestId","declineOfferInterest","getNumberOfUnseen","markAsSeen","status","async","loadBalance","context","state","isBalanceLoading","balance","user","then","response","catch","error","NaN","setTimeout","startConversation","payload","commit","conversationId","interlocutorId","isActive","chargedCoins","finishConversation","handleNewMessage","getInterlocutorId","message","fromUserId","toUserId","isMessageAddressedToMe","isConversationWithInterlocutorPageOpen","conversation","conversations","messages","push","conversationListItem","conversationListItems","find","x","loadConversationListItems","isConversationsPageOpen","addTempSentMessage","updateActiveConversation","activeConversation","user1","userId","user2","freeCharactersLeft","getMe","loadConversation","fetchData","res","Promise","all","fetchConversation","getAssistantInformation","pushError","title","vue","$t","conversationResult","interlocutorInfo","sort","a","b","Date","dateSent","getTime","unreadMessages","getters","hasUnreadMessages","info","result","fetchConversations","setConversation","value","Vue","set","undefined","incrementUnreadConversations","unreadConversations","decrementUnreadConversations","setNumberOfUnreadConversations","setConversationListItems","updateConversationListItemByMessage","lastMessageContent","content","lastMessageDateSent","lastMessageIsAttachment","isAttachment","lastMessageIsConversationEnding","isConversationEnding","conversationListItemIsRead","filter","setInterlocutorInfo","isConversationActive","item","messagingModule","namespaced","mutations","actions","setUnseenInterest","Accepted","unseenInterestAccepted","number","Declined","unseenInterestDeclined","incrementUnseenInterest","decrementUnseenInterest","jobOffersModule","totalUnseen","use","Vuex","assistantModule","urlToRedirectAfterLogon","assistantSearchUrlToRedirect","transactions","activeModuleName","getAppName","setUser","setUserAvatarId","avatarId","setUrlToRedirectAfterLogon","setAssistantSearchUrlToRedirect","setBalance","setIsBalanceLoading","flag","setTransactions","cancelTransaction","transaction","t","comment","TransactionStatus","Cancelled","addTransaction","unshift","setActiveModuleName","moduleName","toString","saveUserToStorage","saveToStorage","updateStoredUser","values","Object","assign","clearStoredUser","photoId","setUserPhotoAsMain","store","rootActionContext","moduleActionContext","createDirectStore","modules","module","messaging","jobOffers","userHasCoins","userHasFreeCharacters","userCanConverse","Constants","IsSupportUserId","accountType","AccountType","Assistant","userId1","userId2","getUserId","$router","currentRoute","path","includes","TransactionType","TopUpTransactionType","setAccountType","fetchTransactions","getPhotos","rateUser","rating","getMyRating","setUserLanguage","language","createPaypalTransaction","request","setPaypalTransactionSuccess","transactionId","setPaypalTransactionError","createOfflineTransaction","SendMessageStatus","AdditionalPaymentRequestStatus","ValidateMessageResult","sendMessage","validateMessage","sendGif","gifUri","sendAttachments","attachments","formData","FormData","forEach","append","name","headers","fetchNumberOfUnreadConversations","VueRouter","selectTypeRouteName","accountSetupRouteName","routes","component","children","meta","requiresAuth","router","mode","base","process","beforeEach","to","from","next","matched","some","record","isAccountSetupRequired","isAccountSetupForbidden","OnlineStatus","onlineStatus","onlineStatusBatch","userIds","ping","showToastOnNewMessage","$toasted","duration","action","text","onClick","_","toastObject","goAway","notifyAboutNewMessage","newMessageSound","Audio","require","play","dispatch","handleNewSimpleMessage","length","m","handleNewPaymentReqestMessage","handleSendMessageResult","NewMessageCoveredPartially","ClientDoesNotHaveCoins","ConversationNotStartedAndNoFreeCoins","NewMessage","ConversationStarted","fetchAddresses","deleteUserPhoto","updateAddress","address","createAddress","updateBasicInfo","fetchInvoiceDetails","setInvoiceDetails","invoiceDetails","configureJobOfferNotifications","connection","on","configureMessagesNotifications","clientId","assistantFullName","messageContent","configureAdditionalPaymentNotifications","$emit","configureVideoCallNotifications","call","incomingCallSound","interval","setInterval","$bvModal","msgBoxConfirm","fromUser","firstName","lastName","okTitle","cancelTitle","videoCallId","finally","pause","clearInterval","connectionHub","startedPromise","startSignalR","HubConnectionBuilder","withUrl","token","configureLogging","LogLevel","Information","build","onclose","start","err","resolve","reject"],"mappings":"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","file":"js/app~5a11b65b.199c1b51.js","sourcesContent":["import { City, Region } from '@/serviceClients/regionWebService';\nimport * as axios from 'axios';\n\nconst url = `${process.env.VUE_APP_API_URL}/joboffer`;\nconst urlInterests = `${process.env.VUE_APP_API_URL}/jobofferinterest`;\n\nexport interface JobOfferViewModel {\n id: string;\n userId: string;\n userFirstName: string;\n userLastName: string;\n userPhotoId: string | undefined;\n dateAdded: string;\n expirationDate: string;\n description: string;\n headline: string;\n categoryId: string;\n categoryName: string;\n language: string;\n interestStatus: JobOfferInterestStatus | undefined;\n newAssistantInterestsNumber: number | undefined;\n totalInterestsNumber: number;\n region: Region;\n city: City;\n countryCode: string;\n regionId: string | null;\n cityId: string | null;\n}\n\nexport interface JobOfferSaveRequest {\n headline: string;\n categoryId: string;\n language: string;\n cityId: string | null;\n regionId: string | null;\n countryCode: string | null;\n}\n\nexport interface JobOfferInterestModel {\n id: string;\n userId: string;\n userFirstName: string;\n userLastName: string;\n userDescription: string;\n status: JobOfferInterestStatus;\n userPhotoId: string;\n}\n\nexport interface JobOfferInterestsModel {\n offerId: string;\n headline: string;\n description: string;\n interests: JobOfferInterestModel[];\n}\n\nexport enum JobOfferInterestStatus {\n Sent = 1,\n Accepted = 2,\n Declined = 3,\n}\n\nexport interface UnseenJobOfferInterests {\n accepted: number,\n declined: number,\n}\n\nexport function getOffer(id: string) {\n return axios.default.get(`${url}/${id}`);\n}\n\nexport function getOfferList() {\n return axios.default.get(url);\n}\n\nexport function addOffer(model: JobOfferSaveRequest) {\n return axios.default.post(`${url}`, model);\n}\n\nexport function editOffer(id: string, model: JobOfferSaveRequest) {\n return axios.default.put(`${url}/${id}`, model);\n}\n\nexport function deleteOffer(id: string) {\n return axios.default.delete(`${url}/${id}`);\n}\n\nexport const getOfferInterests = (id: string) => {\n return axios.default.get(`${urlInterests}/${id}`);\n}\n\nexport const sendOfferInterest = (id: string, assistantId: string) => {\n return axios.default.post(`${urlInterests}/${id}`, {\n data: assistantId\n });\n}\n\nexport const acceptOfferInterest = (offerId: string, interestId: string) => {\n return axios.default.post(`${urlInterests}/${offerId}/${interestId}/accept`);\n}\n\nexport const declineOfferInterest = (offerId: string, interestId: string) => {\n return axios.default.post(`${urlInterests}/${offerId}/${interestId}/decline`);\n}\n\nexport const getNumberOfUnseen = () => {\n return axios.default.get(`${urlInterests}/unseen-number`);\n}\n\nexport const markAsSeen = (status: JobOfferInterestStatus) => {\n return axios.default.post(`${urlInterests}/mark-as-seen`, { data: status });\n}\n","import { ActionContext } from 'vuex';\nimport { AssistantState } from '..';\nimport { balance } from '@/serviceClients/userWebServices';\n\nexport async function loadBalance(context: ActionContext) {\n context.state.isBalanceLoading = true;\n balance(context.state.user!.id)\n .then((response) => {\n context.state.balance = response.data;\n // turning off isLoading only on success in this situation, as we are just retrying on rerror\n context.state.isBalanceLoading = false;\n })\n .catch((error) => {\n context.state.balance = NaN;\n setTimeout(() => loadBalance(context), 1000);\n });\n }","import { ActionContext } from 'vuex';\nimport { ActiveConversationResponse, fetchConversation, fetchConversations, Message } from '@/messaging/messagingWebServices';\nimport { MessagingState } from './types';\nimport { getInterlocutorId, getMe, isMessageAddressedToMe, isConversationWithInterlocutorPageOpen, isConversationsPageOpen } from '@/messaging/helpers';\nimport { getAssistantInformation } from '@/assistants/assistantsWebServices';\nimport { pushError } from '@/core';\nimport { vue } from '@/main';\n\nexport function startConversation(\n context: ActionContext,\n payload: { interlocutorId: string }\n) {\n context.commit('setConversation', {\n conversationId: payload.interlocutorId,\n isActive: true,\n chargedCoins: 0,\n })\n}\n\nexport function finishConversation(\n context: ActionContext,\n payload: { interlocutorId: string }\n) {\n context.commit('setConversation', {\n conversationId: payload.interlocutorId,\n isActive: false,\n })\n}\n\nexport async function handleNewMessage(\n context: ActionContext,\n payload: { message: Message }\n) {\n const interlocutorId = getInterlocutorId(payload.message.fromUserId, payload.message.toUserId)\n if (isMessageAddressedToMe(payload.message) && !isConversationWithInterlocutorPageOpen(interlocutorId)) {\n context.commit('incrementUnreadConversations')\n }\n\n const conversation = context.state.conversations[interlocutorId];\n if (conversation) {\n if (isMessageAddressedToMe(payload.message)) {\n conversation.messages.push(payload.message);\n }\n } else {\n context.commit('setConversation', {\n conversationId: interlocutorId,\n messages: [payload.message],\n })\n };\n\n const conversationListItem = context.state.conversationListItems.find(x => x.interlocutorId === interlocutorId)\n if (!conversationListItem) {\n await loadConversationListItems(context)\n }\n\n if (isConversationsPageOpen()) {\n context.commit('updateConversationListItemByMessage', payload.message)\n }\n}\n\nexport async function addTempSentMessage(\n context: ActionContext,\n payload: { message: Message }\n) {\n const interlocutorId = getInterlocutorId(payload.message.fromUserId, payload.message.toUserId)\n const conversation = context.state.conversations[interlocutorId];\n conversation.messages.push(payload.message);\n context.commit('updateConversationListItemByMessage', payload.message)\n}\n\nexport async function updateActiveConversation(\n context: ActionContext,\n payload: { activeConversation: ActiveConversationResponse }\n) {\n const interlocutorId = getInterlocutorId(payload.activeConversation.user1.userId, payload.activeConversation.user2.userId)\n context.commit('setConversation', {\n conversationId: interlocutorId,\n chargedCoins: payload.activeConversation.chargedCoins,\n freeCharactersLeft: getMe(payload.activeConversation).freeCharactersLeft,\n })\n}\n\nexport async function loadConversation(\n context: ActionContext,\n payload: { interlocutorId: string }\n) {\n const fetchData = async () => {\n try {\n const res = await Promise.all([\n fetchConversation(payload.interlocutorId),\n getAssistantInformation(payload.interlocutorId),\n ])\n\n return res\n } catch (error) {\n pushError((error as any).response?.data?.error || error, { title: vue.$t(\"An error occurred while fetching data\") });\n throw error;\n }\n }\n\n const [conversationResult, interlocutorInfo] = await fetchData()\n\n context.commit('setConversation', {\n conversationId: payload.interlocutorId,\n messages: conversationResult.data.messages.sort(\n (a, b) => new Date(a.dateSent).getTime() - new Date(b.dateSent).getTime()\n ),\n isActive: conversationResult.data.activeConversation.isActive,\n chargedCoins: conversationResult.data.activeConversation.chargedCoins,\n freeCharactersLeft: getMe(conversationResult.data.activeConversation).freeCharactersLeft,\n unreadMessages: 0,\n });\n\n if (context.getters.hasUnreadMessages(payload.interlocutorId)) {\n context.commit('conversationListItemIsRead', payload.interlocutorId)\n context.commit('decrementUnreadConversations')\n }\n\n context.commit('setInterlocutorInfo', {\n interlocutorId: payload.interlocutorId,\n info: interlocutorInfo.data,\n })\n}\n\nexport async function loadConversationListItems(context: ActionContext) {\n const result = await fetchConversations()\n context.commit('setConversationListItems', result.data)\n}","import { AssistantInfo } from \"@/assistants/assistantsWebServices\";\nimport { getInterlocutorId, isMessageAddressedToMe, isConversationWithInterlocutorPageOpen } from \"@/messaging/helpers\";\nimport { ConversationListItem, Message } from \"@/messaging/messagingWebServices\";\nimport Vue from \"vue\";\nimport { MessagingState } from \"./types\";\n\nexport function setConversation(\n state: MessagingState,\n value: {\n conversationId: string,\n isActive?: boolean,\n messages?: Partial[],\n chargedCoins?: number,\n freeCharactersLeft?: number,\n unreadMessages?: number,\n }\n) {\n const conversation = state.conversations[value.conversationId];\n if (conversation) {\n Vue.set(state.conversations, value.conversationId, {\n ...conversation,\n isActive: value.isActive ?? conversation.isActive,\n messages: value.messages ?? conversation.messages,\n chargedCoins: value.chargedCoins ?? conversation.chargedCoins,\n freeCharactersLeft: value.freeCharactersLeft ?? conversation.freeCharactersLeft,\n })\n }\n else {\n Vue.set(state.conversations, value.conversationId, {\n messages: value.messages ?? [],\n isActive: value.isActive ?? false,\n freeCharactersLeft: value.freeCharactersLeft,\n chargedCoins: value.chargedCoins,\n interlocutorInfo: undefined,\n })\n }\n}\n\nexport function incrementUnreadConversations(state: MessagingState) {\n state.unreadConversations += 1;\n}\n\nexport function decrementUnreadConversations(state: MessagingState) {\n state.unreadConversations -= 1;\n}\n\nexport function setNumberOfUnreadConversations(\n state: MessagingState,\n value: number) {\n state.unreadConversations = value;\n}\n\nexport function setConversationListItems(\n state: MessagingState,\n value: ConversationListItem[]\n) {\n state.conversationListItems = value\n}\n\nexport function updateConversationListItemByMessage(\n state: MessagingState,\n value: Message\n) {\n const interlocutorId = getInterlocutorId(value.toUserId, value.fromUserId)\n const conversationListItem = state.conversationListItems.find(x => x.interlocutorId === interlocutorId)\n\n if (!conversationListItem) {\n return\n }\n\n conversationListItem!.lastMessageContent = value.content\n conversationListItem!.lastMessageDateSent = value.dateSent\n conversationListItem!.lastMessageIsAttachment = value.isAttachment\n conversationListItem!.lastMessageIsConversationEnding = value.isConversationEnding\n if (isMessageAddressedToMe(value) && !isConversationWithInterlocutorPageOpen(interlocutorId)) {\n conversationListItem!.unreadMessages++\n }\n}\n\nexport function conversationListItemIsRead(state: MessagingState, value: string) {\n const conversationListItem = state.conversationListItems.filter(x => x.interlocutorId === value)[0]\n if (conversationListItem) {\n conversationListItem.unreadMessages = 0\n }\n}\n\nexport function setInterlocutorInfo(\n state: MessagingState,\n value: {\n interlocutorId: string;\n info: AssistantInfo;\n }\n) {\n const conversation = state.conversations[value.interlocutorId];\n if (conversation) {\n conversation.interlocutorInfo = value.info\n }\n}\n","import { AssistantInfo } from \"@/assistants/assistantsWebServices\";\nimport { ConversationListItem } from \"@/messaging/messagingWebServices\";\nimport { MessagingState } from \"./types\";\n\nexport const isConversationActive = (state: MessagingState) => (interlocutorId: string): boolean => {\n return state.conversations[interlocutorId]?.isActive ?? false\n}\n\nexport const hasUnreadMessages = (state: MessagingState) => (interlocutorId: string): boolean => {\n const item = state.conversationListItems.find(x => x.interlocutorId === interlocutorId)\n if (!item) {\n return false\n }\n\n return item.unreadMessages > 0\n}\n\nexport const interlocutorInfo = (state: MessagingState) => (interlocutorId: string): AssistantInfo | undefined => {\n return state.conversations[interlocutorId]?.interlocutorInfo ?? undefined\n}","import * as actions from './actions'\nimport * as mutations from './mutations'\nimport * as getters from './getters'\nimport { MessagingState } from './types';\n\nexport const messagingModule = {\n namespaced: true as true,\n state: {\n conversations: {},\n unreadConversations: 0,\n conversationListItems: [],\n } as MessagingState,\n getters: { ...getters },\n mutations: { ...mutations },\n actions: { ...actions },\n}","import { JobOfferInterestStatus, UnseenJobOfferInterests } from '@/offers/offerWebServices';\nimport { ActionContext } from 'vuex';\nimport { JobOffersState } from '.';\n\nexport const setUnseenInterest = (context: ActionContext, value: {\n status: JobOfferInterestStatus,\n number: number,\n}) => {\n if (value.status === JobOfferInterestStatus.Accepted) {\n context.state.unseenInterestAccepted = value.number;\n }\n else if (value.status === JobOfferInterestStatus.Declined) {\n context.state.unseenInterestDeclined = value.number;\n }\n}\n\nexport const incrementUnseenInterest = (context: ActionContext) => (status: JobOfferInterestStatus) => {\n if (status === JobOfferInterestStatus.Accepted) {\n context.state.unseenInterestAccepted += 1;\n }\n else if (status === JobOfferInterestStatus.Declined) {\n context.state.unseenInterestDeclined += 1;\n }\n}\n\nexport const decrementUnseenInterest = (context: ActionContext) => (status: JobOfferInterestStatus) => {\n if (status === JobOfferInterestStatus.Accepted) {\n context.state.unseenInterestAccepted -= 1;\n }\n else if (status === JobOfferInterestStatus.Declined) {\n context.state.unseenInterestDeclined -= 1;\n }\n}","import {\n incrementUnseenInterest,\n decrementUnseenInterest,\n setUnseenInterest,\n} from './actions';\n\nexport interface JobOffersState {\n unseenInterestAccepted: number;\n unseenInterestDeclined: number;\n}\n\nexport const jobOffersModule = {\n namespaced: true as true,\n state: {\n unseenInterestAccepted: 0,\n unseenInterestDeclined: 0,\n } as JobOffersState,\n getters: {\n unseenInterestAccepted: (state: JobOffersState) => state.unseenInterestAccepted,\n unseenInterestDeclined: (state: JobOffersState) => state.unseenInterestDeclined,\n totalUnseen: (state: JobOffersState) => state.unseenInterestAccepted + state.unseenInterestDeclined,\n },\n mutations: {},\n actions: {\n setUnseenInterest,\n incrementUnseenInterest,\n decrementUnseenInterest,\n },\n}","import Vue from 'vue'\nimport Vuex, { ActionContext } from 'vuex'\nimport { createDirectStore } from \"direct-vuex\"\nimport { LoggedUserInformation } from '@/login/loginModel'\nimport { saveToStorage } from '@/helpers/storageHelper'\nimport { Transaction, TransactionStatus } from '@/serviceClients/userWebServices'\nimport { loadBalance } from '@/store/actions/loadBalance'\nimport { messagingModule } from './messaging'\nimport { jobOffersModule } from './job-offers'\nimport { getAppName } from '@/helpers/settingsHelper'\nimport VueI18n from 'vue-i18n'\nimport { setUserPhotoAsMain } from '@/panel/userPanelWebServices'\n\nVue.use(Vuex)\n\nexport interface AssistantState {\n user: LoggedUserInformation | undefined;\n urlToRedirectAfterLogon: string | undefined;\n assistantSearchUrlToRedirect: string | undefined;\n balance: number | undefined;\n isBalanceLoading: boolean;\n transactions: Transaction[];\n activeModuleName?: string;\n}\nexport const assistantModule = {\n namespaced: true as true,\n state: {\n user: undefined,\n urlToRedirectAfterLogon: undefined,\n assistantSearchUrlToRedirect: undefined,\n conversations: {},\n balance: undefined,\n isBalanceLoading: false,\n transactions: [],\n activeModuleName: getAppName(),\n } as AssistantState,\n getters: {\n user: (state: AssistantState) => state.user,\n urlToRedirectAfterLogon: (state: AssistantState) => state.urlToRedirectAfterLogon,\n assistantSearchUrlToRedirect: (state: AssistantState) => state.assistantSearchUrlToRedirect,\n balance: (state: AssistantState) => state.balance,\n isBalanceLoading: (state: AssistantState) => state.isBalanceLoading,\n transactions: (state: AssistantState) => state.transactions,\n activeModuleName: (state: AssistantState) => state.activeModuleName,\n },\n mutations: {\n setUser(state: AssistantState, user: LoggedUserInformation | undefined) {\n state.user = user\n },\n setUserAvatarId(state: AssistantState, avatarId: string) {\n state.user!.avatarId = avatarId;\n },\n setUrlToRedirectAfterLogon(state: AssistantState, value: string | undefined) {\n state.urlToRedirectAfterLogon = value;\n },\n setAssistantSearchUrlToRedirect(state: AssistantState, value: string | undefined) {\n state.assistantSearchUrlToRedirect = value;\n },\n setBalance(state: AssistantState, balance: number) {\n state.balance = balance;\n },\n setIsBalanceLoading(state: AssistantState, flag: boolean) {\n state.isBalanceLoading = flag;\n },\n setTransactions(state: AssistantState, transactions: Transaction[]) {\n state.transactions = transactions;\n },\n cancelTransaction(state: AssistantState, value: { id: string, comment: string }) {\n const transaction = state.transactions.filter(t => t.id === value.id)[0];\n if (!!transaction) {\n transaction.comment = value.comment;\n transaction.status = TransactionStatus.Cancelled;\n\n state.transactions = [\n transaction,\n ...state.transactions.filter(t => t.id !== value.id),\n ]\n }\n },\n addTransaction(state: AssistantState, transaction: Transaction) {\n state.transactions.unshift(transaction);\n },\n setActiveModuleName(state: AssistantState, moduleName?: string | VueI18n.TranslateResult) {\n state.activeModuleName = moduleName?.toString();\n }\n },\n actions: {\n saveUserToStorage(context: ActionContext) {\n saveToStorage('user', context.state.user);\n },\n updateStoredUser(context: ActionContext, values: Partial) {\n Object.assign(context.state.user, values);\n saveToStorage('user', context.state.user);\n },\n clearStoredUser(context: ActionContext) {\n context.state.user = undefined;\n saveToStorage('user', undefined);\n },\n loadBalance,\n async setPhotoAsMain(context: ActionContext, photoId: string | undefined) {\n if (photoId) {\n await setUserPhotoAsMain(context.state.user!.id, photoId);\n }\n context.commit('setUserAvatarId', photoId);\n saveToStorage('user', context.state.user);\n }\n }\n}\n\nconst { store, rootActionContext, moduleActionContext } = createDirectStore({\n modules: {\n module: assistantModule,\n messaging: messagingModule,\n jobOffers: jobOffersModule,\n }\n})\n// Export the direct-store instead of the classic Vuex store.\nexport default store\n// The following exports will be used to enable types in the\n// implementation of actions.\nexport { rootActionContext, moduleActionContext }\n// The following lines enable types in the injected store '$store'.\nexport type AppStore = typeof store\ndeclare module \"vuex\" {\n interface Store {\n direct: AppStore\n }\n}","import { AccountType } from '@/register/registerModel';\nimport store from '@/store';\nimport { ActiveConversationResponse, ActiveConversationUser, Message } from './messagingWebServices';\nimport { vue } from '@/main';\nimport Constants from '@/Constants';\n\nexport const userHasCoins = () => {\n return store.getters.module.balance! > 0\n}\n\nexport const userHasFreeCharacters = (interlocutorId: string) => {\n return store.state.messaging.conversations[interlocutorId].freeCharactersLeft > 0;\n}\n\nexport const userCanConverse = (interlocutorId: string) => {\n if(Constants.IsSupportUserId(interlocutorId)) return true;\n if(Constants.IsSupportUserId(store.getters.module.user!.id)) return true;\n\n const conversation = store.state.messaging.conversations[interlocutorId];\n if (!conversation) {\n return true;\n }\n\n if (store.getters.module.user!.accountType === AccountType.Assistant) {\n return store.state.messaging.conversations[interlocutorId].isActive || userHasFreeCharacters(interlocutorId);\n }\n\n return userHasCoins() || userHasFreeCharacters(interlocutorId);\n}\n\nexport function getMe(activeConversation: ActiveConversationResponse): ActiveConversationUser {\n return store.getters.module.user!.id === activeConversation.user1.userId ? activeConversation.user1 : activeConversation.user2;\n}\n\nexport function getInterlocutorId(userId1: string, userId2: string) {\n const userId = store.getters.module.user!.id;\n return userId === userId1 ? userId2 : userId1;\n}\n\nexport function getUserId(userId1: string, userId2: string) {\n const userId = store.getters.module.user!.id;\n return userId === userId1 ? userId1 : userId2;\n}\n\nexport function isMessageAddressedToMe(message: Message): boolean {\n return message.toUserId === store.getters.module.user!.id\n}\n\nexport function isConversationsPageOpen(): boolean {\n return vue.$router.currentRoute.path.includes('/conversations')\n}\n\nexport function isConversationWithInterlocutorPageOpen(interlocutorId: string): boolean {\n return vue.$router.currentRoute.path.includes(`/conversations/${interlocutorId}`)\n}\n","import * as axios from 'axios';\nimport { AccountType } from '@/register/registerModel';\nimport { LanguageType } from '@/core/translate/translateTypes';\nimport { AdditionalPaymentRequest } from '@/messaging/additionalPaymentRequestWebServices';\nimport store from '@/store';\nimport { UserRatingInfo } from '@/assistants/assistantsWebServices';\n\nconst url = `${process.env.VUE_APP_API_URL}/user`;\n\n\nexport enum TransactionType {\n OnlineTopUp,\n OfflineTopUp,\n PayOut,\n Payment,\n Charge\n}\n\nexport enum TransactionStatus {\n Successful,\n Pending,\n Cancelled,\n Error\n}\n\nexport interface User {\n id: string;\n firstName: string;\n lastName: string;\n}\n\nexport interface VideoCall {\n fromUser: User;\n toUser: User;\n}\n\nexport interface Transaction {\n id: string;\n amount: number;\n type: TransactionType;\n transactionDateTime: string;\n comment: string;\n status: TransactionStatus;\n invoiceGeneration?: InvoiceGeneration;\n interlocutor?: User;\n videoCall?: VideoCall;\n additionalPaymentRequest?: AdditionalPaymentRequest;\n}\n\nexport type InvoiceGeneration = {\n id: string;\n invoiceNumber: string;\n invoiceFileName: string;\n}\n\nexport type UserPhoto = {\n id: string;\n userId: string;\n dateAdded: Date;\n isMainPhoto: boolean;\n}\nexport interface Currency {\n code: string,\n symbol: string;\n ratePerUsd: number;\n allowInPayout: boolean;\n}\n\nexport interface CreatePaymentTransactionRequest {\n coins: number;\n price: number;\n currency: Currency;\n topUpTransactionType: TopUpTransactionType;\n bankTransferHtml?: string;\n}\n\nexport enum TopUpTransactionType\n{\n Business,\n Entertainment\n}\n\n\nexport function setAccountType(userId: string, accountType: AccountType) {\n return axios.default.put(`${url}/${userId}/setAccountType`, { data: accountType });\n}\n\nexport function balance(userId: string) {\n return axios.default.get(`${url}/${userId}/balance`);\n}\n\nexport function fetchTransactions(userId: string) {\n return axios.default.get(`${url}/${userId}/transactions`);\n}\n\nexport function getPhotos(userId: string) {\n return axios.default.get(`${url}/${userId}/photos`)\n}\n\nexport function rateUser(userId: string, rating: number) {\n return axios.default.put(`${url}/${userId}/rate`, { rating })\n}\n\nexport function getMyRating() {\n return axios.default.get(`${url}/${store.getters.module.user!.id}/rate/mine`);\n}\n\nexport function setUserLanguage(userId: string, language: LanguageType) {\n return axios.default.put(`${url}/${userId}/language`, { data: language });\n}\n\n\nexport function createPaypalTransaction(userId: string, request: CreatePaymentTransactionRequest) {\n return axios.default.put(`${url}/${userId}/createPaypalTransaction`, request);\n}\n\nexport function setPaypalTransactionSuccess(userId: string, transactionId: string) {\n return axios.default.put(`${url}/${userId}/transactions/${transactionId}/success`);\n}\n\nexport function setPaypalTransactionError(userId: string, transactionId: string, error: string) {\n return axios.default.put(`${url}/${userId}/transactions/${transactionId}/error`, { data: error });\n}\n\nexport function createOfflineTransaction(userId: string, request: CreatePaymentTransactionRequest) {\n return axios.default.put(`${url}/${userId}/createOfflineTransaction`, request);\n}","import { LanguageType } from '@/core/translate/translateTypes';\n\nexport default interface RegisterModel {\n password: string;\n confirmPassword: string;\n email: string;\n firstName: string;\n lastName: string;\n accountType: AccountType | undefined,\n language: LanguageType,\n referralUserId?: string;\n}\n\nexport enum AccountType {\n Assistant,\n Client,\n Unknown\n}","import * as axios from 'axios';\nimport { AdditionalPaymentRequest } from './additionalPaymentRequestWebServices';\n\nconst url = `${process.env.VUE_APP_API_URL}`;\n\nexport interface User {\n id: string;\n firstName: string;\n lastName: string;\n}\n\nexport interface ConversationListItem {\n interlocutorId: string;\n interlocutorFirstName: string,\n interlocutorLastName: string,\n interlocutorAvatarId?: string;\n fromUserId: string;\n unreadMessages: number;\n lastMessageContent: string;\n lastMessageDateSent: string;\n lastMessageIsAttachment: boolean;\n lastMessageIsConversationEnding: boolean;\n}\n\nexport interface ConversationModel {\n messages: Message[];\n activeConversation: ActiveConversationResponse;\n}\n\nexport interface ActiveConversationUser {\n userId: string;\n freeCharactersLeft: number;\n}\n\nexport interface ActiveConversationResponse {\n chargedCoins: number;\n isActive: boolean;\n user1: ActiveConversationUser;\n user2: ActiveConversationUser;\n}\n\nexport interface Message {\n id: string;\n content: string;\n dateSent: string;\n dateRead?: string;\n fromUserId: string;\n toUserId: string;\n attachmentName?: string;\n attachmentBlobName?: string;\n isAttachment: boolean;\n gifUrl: string;\n isGif: boolean;\n additionalPaymentRequestId?: string;\n additionalPaymentRequestStatus?: AdditionalPaymentRequestStatus;\n additionalPaymentRequest: AdditionalPaymentRequest;\n isConversationEnding: boolean;\n}\n\nexport enum SendMessageStatus {\n NewMessage,\n NewMessageCoveredPartially,\n ClientDoesNotHaveCoins,\n ConversationStarted,\n AssistantHasNotSetHourlyRate,\n ConversationNotStartedAndNoFreeCoins,\n}\n\nexport enum AdditionalPaymentRequestStatus {\n New,\n Approved,\n Rejected,\n FinalApproved\n}\n\nexport interface SendMessageResult {\n message: Message;\n activeConversation: ActiveConversationResponse;\n status: SendMessageStatus;\n}\n\nexport enum ValidateMessageResult {\n Ok = 1,\n MessageContainsContactInformation,\n}\n\nexport function sendMessage(interlocutorId: string, message: string) {\n return axios.default.post(`${url}/conversations/${interlocutorId}`, { message: message });\n}\nexport function validateMessage(message: string) {\n return axios.default.post(`${url}/conversations/validateMessage`, { message: message });\n}\n\nexport function sendGif(interlocutorId: string, gifUri: string) {\n return axios.default.post(`${url}/conversations/${interlocutorId}/gif`, { data: gifUri });\n}\n\nexport function sendAttachments(interlocutorId: string, attachments: File[]) {\n const formData = new FormData();\n attachments.forEach(a => {\n formData.append(a.name, a, a.name);\n });\n\n return axios.default.post(`${url}/conversations/${interlocutorId}/attachment`, formData, {\n headers: {\n 'Content-Type': 'multipart/form-data',\n },\n });\n}\n\nexport function fetchConversations() {\n return axios.default.get(`${url}/conversations`);\n}\n\nexport function fetchNumberOfUnreadConversations() {\n return axios.default.get(`${url}/conversations/unread-number`);\n}\n\nexport function fetchConversation(interlocutorId: string) {\n return axios.default.get(`${url}/conversations/${interlocutorId}`);\n}\n\nexport function finishConversation(interlocutorId: string) {\n return axios.default.get(`${url}/conversations/${interlocutorId}/finish`);\n}\n\nexport function isConversationActive(interlocutorId: string) {\n return axios.default.get(`${url}/conversations/${interlocutorId}/is-active`);\n}\n","import Vue from 'vue'\nimport VueRouter, { RouteConfig } from 'vue-router'\nimport store from '@/store'\nimport { isAccountSetupRequired, isAccountSetupForbidden } from '@/accountSetup/accountSetupConditions'\n\nVue.use(VueRouter)\n\nconst selectTypeRouteName = 'SelectType';\nexport const accountSetupRouteName = 'AccountSetup';\n\nconst routes: RouteConfig[] = [\n {\n path: '/',\n name: 'Home',\n component: () => import(/* webpackChunkName: \"home\" */ '../views/Home.vue'),\n },\n {\n path: '/offers',\n name: 'Offers',\n component: () => import(/* webpackChunkName: \"account\" */ '../views/Offers.vue'),\n children: [\n {\n path: '',\n name: 'Main',\n component: () => import(/* webpackChunkName: \"account\" */ '../offers/OffersMain.vue')\n },\n {\n path: 'new',\n name: 'New offer',\n component: () => import(/* webpackChunkName: \"account\" */ '../offers/OfferEditor.vue'),\n meta: {\n requiresAuth: true\n },\n },\n {\n path: ':id/edit',\n name: 'Edit offer',\n component: () => import(/* webpackChunkName: \"account\" */ '../offers/OfferEditor.vue'),\n meta: {\n requiresAuth: true\n },\n },\n ],\n },\n {\n path: '/offers/:offerId/interests',\n name: 'Offer interests',\n component: () => import(/* webpackChunkName: \"account\" */ '../offers/interests/OfferInterests.vue'),\n meta: {\n requiresAuth: true\n },\n },\n {\n path: '/invite',\n name: 'Invite',\n component: () => import(/* webpackChunkName: \"account\" */ '../views/Invite.vue'),\n meta: {\n requiresAuth: true\n },\n },\n {\n path: '/assistants',\n name: 'Assistants',\n component: () => import(/* webpackChunkName: \"search\" */ '../views/Assistants.vue')\n },\n {\n path: '/category/:id/:name',\n name: 'Category',\n component: () => import(/* webpackChunkName: \"search\" */ '../views/Category.vue')\n },\n {\n path: '/assistant/:id',\n name: 'Assistant',\n component: () => import(/* webpackChunkName: \"assistants\" */ '../views/Assistant.vue')\n },\n {\n path: '/kevin',\n name: 'Assistant - Kevin',\n component: () => import(/* webpackChunkName: \"assistants\" */ '../views/Kevin.vue'),\n \n },\n {\n path: '/assistant/:id/sendMessage',\n name: 'AssistantMessage',\n component: () => import(/* webpackChunkName: \"assistants\" */ '../views/Assistant.vue')\n },\n {\n path: '/register',\n name: 'Register',\n component: () => import(/* webpackChunkName: \"account\" */ '../views/Register.vue')\n },\n {\n path: '/register/:invitationId',\n name: 'Register',\n component: () => import(/* webpackChunkName: \"account\" */ '../views/Register.vue')\n },\n {\n path: '/register/confirm/:id',\n name: 'Confirm Registration',\n component: () => import(/* webpackChunkName: \"account\" */ '../views/ConfirmRegistration.vue')\n },\n {\n path: '/login',\n name: 'Login',\n component: () => import(/* webpackChunkName: \"account\" */ '../views/Login.vue')\n },\n {\n path: '/forgotPassword',\n name: 'Forgot password',\n component: () => import(/* webpackChunkName: \"account\" */ '../views/ForgotPassword.vue')\n },\n {\n path: '/resetPassword/:userId/:requestPasswordResetId',\n name: 'Reset Password',\n component: () => import(/* webpackChunkName: \"account\" */ '../views/ResetPassword.vue')\n },\n {\n path: '/facebook',\n name: 'Facebook',\n component: () => import(/* webpackChunkName: \"account\" */ '../views/Facebook.vue')\n },\n {\n path: '/selectType',\n name: selectTypeRouteName,\n component: () => import(/* webpackChunkName: \"account\" */ '../views/SelectType.vue')\n },\n {\n path: '/accountSetup',\n name: 'AccountSetup',\n component: () => import(/* webpackChunkName: \"account\" */ '../accountSetup/AccountSetup.vue')\n },\n {\n path: '/panel',\n name: 'Panel',\n meta: {\n requiresAuth: true\n },\n component: () => import(/* webpackChunkName: \"account\" */ '../views/Panel.vue'),\n },\n {\n path: '/conversations',\n name: 'Conversations',\n meta: {\n requiresAuth: true\n },\n component: () => import(/* webpackChunkName: \"conversation\" */ '../views/Conversations.vue')\n },\n {\n path: '/conversations/:id',\n name: 'ConversationDetails',\n meta: {\n requiresAuth: true\n },\n component: () => import(/* webpackChunkName: \"conversation\" */ '../views/Conversations.vue')\n },\n {\n path: '/page/:id',\n name: 'Page',\n meta: {\n requiresAuth: false\n },\n component: () => import(/* webpackChunkName: \"page\" */ '../views/Page.vue')\n },\n {\n path: '/blog/:id',\n name: 'Blog Post',\n meta: {\n requiresAuth: false\n },\n component: () => import(/* webpackChunkName: \"page\" */ '../views/BlogPost.vue')\n },\n {\n path: '/blog',\n name: 'Blog',\n meta: {\n requiresAuth: false\n },\n component: () => import(/* webpackChunkName: \"page\" */ '../views/Blog.vue')\n },\n {\n path: '/search/:phrase',\n name: 'Search',\n meta: {\n requiresAuth: false\n },\n component: () => import(/* webpackChunkName: \"search\" */ '../views/Search.vue')\n },\n {\n path: '/conversations/call/:videoCallId',\n name: 'Call',\n meta: {\n requiresAuth: true\n },\n component: () => import(/* webpackChunkName: \"conversation\" */ '../views/Call.vue')\n },\n {\n path: '/transactions',\n name: 'Transactions',\n meta: {\n requiresAuth: true\n },\n component: () => import(/* webpackChunkName: \"account\" */ '../views/Transactions.vue')\n },\n {\n path: '/verify-skills',\n name: 'Verify skills',\n meta: {\n requiresAuth: true\n },\n component: () => import(/* webpackChunkName: \"account\" */ '../verifySkills/VerifySkillsMain.vue')\n },\n {\n path: '/howItWorks',\n name: 'HowItWorks',\n meta: {\n requiresAuth: false\n },\n component: () => import(/* webpackChunkName: \"howItWorks\" */ '../views/HowItWorks.vue')\n },\n {\n path: '/whyJoinUs',\n name: 'WhyJoinUs',\n meta: {\n requiresAuth: false\n },\n component: () => import(/* webpackChunkName: \"whyJoinUs\" */ '../views/WhyJoinUs.vue')\n },\n {\n path: '/aboutUs',\n name: 'AboutUs',\n meta: {\n requiresAuth: false\n },\n component: () => import(/* webpackChunkName: \"aboutUs\" */ '../views/AboutUs.vue')\n },\n {\n path: '/partnerProgram',\n name: 'PartnerProgram',\n meta: {\n requiresAuth: false\n },\n component: () => import(/* webpackChunkName: \"partnerProgram\" */ '../views/PartnerProgram.vue')\n },\n {\n path: '/proMarketing',\n name: 'ProMarketingProgram',\n meta: {\n requiresAuth: false\n },\n component: () => import(/* webpackChunkName: \"proMarketingProgram\" */ '../views/ProMarketingProgram.vue')\n },\n {\n path: '/support/:aboutUserId?',\n name: 'Support request',\n meta: {\n requiresAuth: false\n },\n component: () => import(/* webpackChunkName: \"support\" */ '../views/CreateSupportRequest.vue')\n }\n]\n\nconst router = new VueRouter({\n mode: 'history',\n base: process.env.BASE_URL,\n routes\n});\n\nrouter.beforeEach((to, from, next) => {\n store.commit.module.setActiveModuleName();\n\n if (store.getters.module.user && !to.matched.some(record => record.name === accountSetupRouteName) && isAccountSetupRequired()) {\n next({ name: accountSetupRouteName });\n return;\n }\n\n if (store.getters.module.user && to.matched.some(record => record.name === accountSetupRouteName) && isAccountSetupForbidden()) {\n next({ name: \"Home\" });\n return;\n }\n\n if (store.getters.module.user && to.matched.some(record => record.path.includes('register'))) {\n next({ name: 'Panel' });\n return;\n }\n\n if (to.matched.some(record => record.meta.requiresAuth) && !store.getters.module.user) {\n store.commit.module.setUrlToRedirectAfterLogon(\n to.path\n );\n next({ name: 'Login' });\n } else {\n next();\n }\n})\n\nexport default router\n","import * as axios from 'axios';\n\nconst url = `${process.env.VUE_APP_API_URL}/userStatus`;\n\nexport enum OnlineStatus {\n Offline,\n Available,\n Busy\n}\n\nexport interface UserAvailabilityModel {\n userId: string;\n status: OnlineStatus;\n}\n\nexport function onlineStatus(userId: string) {\n return axios.default.get(`${url}/onlineStatus/${userId}`);\n}\n\nexport function onlineStatusBatch(userIds: string[]) {\n return axios.default.post(`${url}/onlineStatusBatch`, { data: userIds });\n}\n\nexport function ping() {\n return axios.default.put(`${url}/ping`);\n}","import { vue } from '@/main';\nimport store from '@/store';\nimport {\n getInterlocutorId,\n getUserId,\n isConversationsPageOpen,\n isMessageAddressedToMe,\n isConversationWithInterlocutorPageOpen\n} from './helpers';\nimport {\n ActiveConversationResponse,\n Message,\n SendMessageResult,\n SendMessageStatus\n} from './messagingWebServices';\n\n\nasync function showToastOnNewMessage(message: Message) {\n vue.$toasted.info(\n vue.$t('You have new message').toString(),\n {\n duration: 5000,\n action: {\n text: vue.$t('Read').toString(),\n onClick: async (_, toastObject) => {\n await vue.$router.push(`/conversations/${getInterlocutorId(message.fromUserId, message.toUserId)}`)\n toastObject.goAway();\n }\n }\n });\n}\n\nasync function notifyAboutNewMessage(message: Message) {\n if (!isConversationsPageOpen()) {\n await showToastOnNewMessage(message)\n }\n\n if (isMessageAddressedToMe(message) && !isConversationWithInterlocutorPageOpen(getUserId(message.fromUserId, message.toUserId))) {\n\n const newMessageSound = new Audio(require('../assets/audio/new_message.ogg'))\n newMessageSound.play().catch()\n }\n}\n\nasync function handleNewMessage(message: Message, activeConversation: ActiveConversationResponse) {\n await notifyAboutNewMessage(message);\n\n await store.dispatch.messaging.handleNewMessage({ message })\n await store.dispatch.messaging.updateActiveConversation({ activeConversation })\n await store.dispatch.module.loadBalance()\n}\n\nexport async function handleNewSimpleMessage(messages: Message[]) {\n if (messages && messages.length > 0) {\n messages.forEach(async m => {\n await store.dispatch.messaging.handleNewMessage({ message: m })\n });\n }\n}\n\nexport async function handleNewPaymentReqestMessage(message: Message) {\n await notifyAboutNewMessage(message);\n\n await store.dispatch.messaging.handleNewMessage({ message })\n}\n\nexport async function handleSendMessageResult(result: SendMessageResult) {\n const interlocutorId = getInterlocutorId(result.message.fromUserId, result.message.toUserId)\n switch (result.status) {\n case SendMessageStatus.NewMessageCoveredPartially:\n if (isConversationWithInterlocutorPageOpen(interlocutorId)) {\n vue.$toasted.info(vue.$t('Client ran out of funds. Conversation finished').toString(), { duration: 5000 })\n }\n await handleNewMessage(result.message, result.activeConversation);\n break;\n case SendMessageStatus.ClientDoesNotHaveCoins:\n case SendMessageStatus.ConversationNotStartedAndNoFreeCoins:\n vue.$toasted.error(vue.$t('Client does not have sufficient funds. Message has not been sent or has been sent partially.').toString(), { duration: 5000 });\n await store.dispatch.messaging.finishConversation({ interlocutorId })\n break;\n case SendMessageStatus.NewMessage:\n await handleNewMessage(result.message, result.activeConversation);\n break;\n case SendMessageStatus.ConversationStarted:\n await store.dispatch.messaging.startConversation({ interlocutorId })\n await handleNewMessage(result.message, result.activeConversation);\n break;\n }\n}\n","import { EducationLevel, Gender, MaritalStatus } from '@/accountSetup/accountSetupService';\nimport { City } from '@/serviceClients/regionWebService';\nimport * as axios from 'axios';\n\nconst url = `${process.env.VUE_APP_API_URL}/user`;\n\nexport interface Address {\n userId: string;\n id: string;\n street: string;\n additionalInfo: string;\n city: City | null;\n country: string;\n zipCode: string;\n longitude: number | null;\n latitude: number | null;\n}\n\nexport interface UserBasicInfo {\n firstName: string,\n lastName: string;\n gender: Gender;\n maritalStatus?: MaritalStatus;\n height?: number;\n description?: string;\n birthDate?: Date;\n educationLevel?: EducationLevel;\n educationDetails?: string\n}\n\nexport function fetchAddresses(userId: string) {\n return axios.default.get(`${url}/${userId}/addresses`);\n}\n\nexport function deleteUserPhoto(userId: string, id: string) {\n return axios.default.delete(`${url}/${userId}/photos/${id}`);\n}\n\nexport function setUserPhotoAsMain(userId: string, id: string) {\n return axios.default.post(`${url}/${userId}/photos/${id}/set-main`);\n}\n\nexport function updateAddress(userId: string, address: Address) {\n return axios.default.put(`${url}/${userId}/addresses`, address);\n}\n\nexport function createAddress(userId: string, address: Address) {\n return axios.default.post(`${url}/${userId}/addresses`, address);\n}\n\nexport function updateBasicInfo(userId: string, info: UserBasicInfo) {\n return axios.default.put(`${url}/${userId}/basicInfo`, info);\n}\n\nexport function fetchInvoiceDetails(userId: string) {\n return axios.default.get(`${url}/${userId}/invoiceDetails`);\n}\n\nexport function setInvoiceDetails(userId: string, invoiceDetails: string) {\n return axios.default.put(`${url}/${userId}/invoiceDetails`, { data: invoiceDetails });\n}","import { HubConnection } from '@microsoft/signalr';\n\nexport const configureJobOfferNotifications = (connection: HubConnection, vue: Vue) => {\n connection.on('JobInterestStatusChanged', () => {\n vue.$toasted.info(vue.$t('Your job interest has been responded').toString(), { duration: 5000 })\n });\n\n \n connection.on('JobInterestSent', () => {\n vue.$toasted.info(vue.$t('Assistant expressed an interest with your job offer.').toString(), { duration: 5000 })\n });\n}","import { Message, SendMessageResult } from '@/messaging/messagingWebServices';\nimport store from '@/store';\nimport { HubConnection } from '@microsoft/signalr';\nimport { handleNewSimpleMessage, handleNewPaymentReqestMessage, handleSendMessageResult } from '@/messaging/messagingHandlers';\nimport { getInterlocutorId } from '@/messaging/helpers';\n\nexport const configureMessagesNotifications = (connection: HubConnection, vue: Vue) => {\n connection.on('MessageReceived', async (result: SendMessageResult) => {\n await handleSendMessageResult(result);\n });\n\n connection.on('AttachmentReceived', async (result: Message[]) => {\n await handleNewSimpleMessage(result);\n })\n\n connection.on('GifReceived', async (result: Message) => {\n await handleNewSimpleMessage([result]);\n })\n\n connection.on('PaymentRequestMessageReceived', async (result: Message) => {\n await handleNewPaymentReqestMessage(result)\n });\n\n connection.on('ConversationFinished', async (clientId, assistantId) => {\n await store.dispatch.messaging.finishConversation({ interlocutorId: getInterlocutorId(clientId, assistantId) })\n });\n\n connection.on('AssistantModifiedHourlyRate', async (conversationId, assistantFullName) => {\n const messageContent = vue.$t('Conversation with the assistant {0} has ended, because hourly rate has changed.', [assistantFullName]).toString();\n await store.dispatch.messaging.finishConversation({ interlocutorId: conversationId })\n vue.$toasted.info(messageContent, { duration: 5000 })\n });\n}\n","import { AdditionalPaymentRequest } from '@/messaging/additionalPaymentRequestWebServices';\nimport { HubConnection } from '@microsoft/signalr';\n\nexport const configureAdditionalPaymentNotifications = (connection: HubConnection, vue: Vue) => {\n connection.on('PaymentRequestSaved', (request: AdditionalPaymentRequest) => {\n vue.$emit(\"PaymentRequestSaved\", request);\n });\n}","import { IncomingCallModel } from '@/messaging/videoCallWebServices'\nimport { HubConnection } from '@microsoft/signalr'\n\nexport const configureVideoCallNotifications = (connection: HubConnection, vue: Vue) => {\n connection.on('NewCall', (call: IncomingCallModel) => {\n const incomingCallSound = new Audio(require('../assets/audio/incoming_call.ogg'))\n const interval = setInterval(() => incomingCallSound.play().catch(), 2000)\n\n vue.$bvModal.msgBoxConfirm(`Incoming call from ${call.fromUser.firstName} ${call.fromUser.lastName}`, {\n okTitle: vue.$t('Accept').toString(),\n cancelTitle: vue.$t('Cancel').toString()\n }).then(value => {\n if (value) {\n return vue.$router.push(`/conversations/call/${call.videoCallId}`)\n }\n }).finally(() => {\n if (interval !== null) {\n incomingCallSound.pause()\n clearInterval(interval)\n }\n }).catch()\n })\n}","import store from '@/store'\nimport { HubConnection, HubConnectionBuilder, LogLevel } from \"@microsoft/signalr\"\nimport { configureJobOfferNotifications } from './jobOfferNotifications';\nimport { configureMessagesNotifications } from './messagesNotifications';\nimport { configureAdditionalPaymentNotifications } from './paymentRequestsNotifications';\nimport { configureVideoCallNotifications } from './videoCallNotifications';\n\nlet connectionHub: HubConnection | undefined;\n\nlet startedPromise = null\nexport const startSignalR = (vue: Vue): any => {\n connectionHub = new HubConnectionBuilder()\n .withUrl(`${process.env.VUE_APP_API_URL}/conversationsHub?token=${store.getters.module.user!.token}`)\n .configureLogging(LogLevel.Information)\n .build()\n\n connectionHub.onclose(() => startSignalR(vue));\n\n startedPromise = connectionHub.start().catch(err => {\n return new Promise((resolve, reject) =>\n setTimeout(() => startSignalR(vue)\n .then(resolve)\n .catch(() => {\n // hacer nada\n }), 500))\n })\n\n configureMessagesNotifications(connectionHub, vue);\n configureVideoCallNotifications(connectionHub, vue);\n configureAdditionalPaymentNotifications(connectionHub, vue);\n configureJobOfferNotifications(connectionHub, vue);\n return startedPromise\n}"],"sourceRoot":""}