{ "version": 3, "sources": ["../../../packages/apps/connect/web/src/stores/auth-store.tsx"], "sourcesContent": ["import { action, computed, observable, runInAction } from 'mobx';\n\nimport type { ErrorResponse } from '@servicestack/client';\n\nimport type TSquareCustomerDetails from 'bz-core-controls/controls/payments/square/types/square-customer-details';\n\nimport CoreAuthStore from 'bz-stores/lib/auth-store';\n\nimport createContext from 'bz-utilities/hooks/context-v2';\n\nimport { clearToken, client, saveRefreshToken, setTokens } from 'connect/core/client';\n\nimport { Authenticate, OnlineCurrentUserRequest, OnlineLogoutRequest } from 'tm3-core/api.dtos';\nimport type { CurrentUser } from 'tm3-core/api.dtos';\n\nimport cache from '../cache';\n\nexport const [AuthStoreContext, useAuthStore] = createContext('AuthStore');\n\nclass AuthStore {\n @observable id = -1;\n @observable title = '';\n @observable forename = '';\n @observable surname = '';\n @observable dateOfBirth = '';\n @observable addressLine1 = '';\n @observable addressLine2 = '';\n @observable addressLine3 = '';\n @observable addressLine4 = '';\n @observable addressLine5 = '';\n @observable postcode = '';\n @observable homeTelephone = '';\n @observable workTelephone = '';\n @observable mobileTelephone = '';\n @observable email = '';\n @observable gender = '';\n @observable locationGuid = '';\n @observable practitionerGuid = '';\n @observable reference = '';\n @observable groupId = 0;\n @observable paymentMethodId = '';\n @observable canBookAppointments = true;\n @observable lastAppointmentPractitionerGuid = '';\n @observable overridePayAtClinic = false;\n\n @observable isAuthenticated: boolean = false;\n @observable loaded = false;\n @observable twoFactorSetup: boolean = false;\n @observable hasPassKey: boolean = false;\n @observable twoFactorAllowSms: boolean = false;\n @observable twoFactorChallenge: boolean = false;\n\n @computed\n get customerFullName(): string {\n const { forename = '', surname = '', title = '' } = this;\n return `${title} ${forename} ${surname}`;\n }\n\n @computed\n get squareCustomerDetails(): TSquareCustomerDetails {\n const result: TSquareCustomerDetails = {\n addressLines: [\n this.addressLine1,\n this.addressLine2,\n this.addressLine3,\n this.addressLine4,\n this.addressLine5\n ],\n familyName: this.surname,\n givenName: this.forename,\n email: this.email,\n country: 'GB', //find this\n city: this.addressLine3,\n region: this.addressLine4,\n phone: this.mobileTelephone\n };\n return result;\n }\n\n async login(email: string, password: string) {\n try {\n const res = (await client.post(\n new Authenticate({ userName: email, password: password, provider: 'credentials' })\n )) as CurrentUser;\n\n this.onLogin(res);\n } catch (err) {\n return (err as ErrorResponse)?.responseStatus?.message;\n }\n }\n\n @action.bound\n public onLogin(res: CurrentUser) {\n const {\n customer,\n isAuthenticated,\n hasPassKey,\n twoFactorSetup,\n twoFactorAllowSms,\n twoFactorRequired,\n twoFactorAuthenticated,\n meta\n } = res;\n this.isAuthenticated = isAuthenticated;\n this.hasPassKey = hasPassKey;\n this.twoFactorSetup = twoFactorSetup;\n this.twoFactorAllowSms = twoFactorAllowSms;\n CoreAuthStore.user.twoFactorAllowSms = twoFactorAllowSms;\n if (twoFactorRequired && !twoFactorAuthenticated) {\n this.twoFactorChallenge = true;\n this.loaded = true;\n\n return '';\n } else if (isAuthenticated) {\n this.setUser(customer, meta);\n }\n this.isAuthenticated = isAuthenticated;\n setTokens(res.bearerToken, res.refreshToken);\n saveRefreshToken(res.refreshToken);\n this.loaded = true;\n }\n\n async checkUser() {\n try {\n const res = await client.get(new OnlineCurrentUserRequest());\n runInAction(() => {\n const { customer, isAuthenticated, hasPassKey, twoFactorSetup, twoFactorAllowSms, meta } =\n res.result;\n this.isAuthenticated = isAuthenticated;\n this.hasPassKey = hasPassKey;\n this.twoFactorSetup = twoFactorSetup;\n this.twoFactorAllowSms = twoFactorAllowSms;\n\n if (isAuthenticated) {\n this.setUser(customer, meta);\n } else {\n clearToken();\n }\n });\n } catch (err) {\n runInAction(() => {\n this.isAuthenticated = false;\n clearToken();\n });\n return false;\n } finally {\n runInAction(() => {\n this.loaded = true;\n });\n return true;\n }\n }\n\n async logout() {\n try {\n await client.post(new OnlineLogoutRequest());\n } finally {\n clearToken();\n }\n\n runInAction(() => {\n this.checkUser();\n });\n }\n\n getUser() {\n const { id, reference, title, forename, surname, mobileTelephone, email } = this;\n return { id, reference, title, forename, surname, mobileTelephone, email };\n }\n\n @action.bound\n setUser(client: any, meta: any) {\n CoreAuthStore.user.twoFactorAllowSms = this.twoFactorAllowSms;\n CoreAuthStore.user.mobileNumber = client.mobileTelephone;\n CoreAuthStore.user.name = `${client.forename} ${client.surname}`;\n CoreAuthStore.user.meta = meta;\n CoreAuthStore.stage1Authenticated = true;\n\n this.title = client.title;\n this.forename = client.forename;\n this.surname = client.surname;\n this.dateOfBirth = client.dateOfBirth;\n this.addressLine1 = client.addressLine1;\n this.addressLine2 = client.addressLine2;\n this.addressLine3 = client.addressLine3;\n this.addressLine4 = client.addressLine4;\n this.addressLine5 = client.addressLine5;\n this.postcode = client.postCode;\n this.homeTelephone = client.homeTelephone;\n this.workTelephone = client.workTelephone;\n this.mobileTelephone = client.mobileTelephone;\n this.email = client.email;\n this.gender = client.gender;\n this.reference = client.reference;\n this.canBookAppointments = client.canBookAppointments;\n this.lastAppointmentPractitionerGuid = client.lastAppointmentPractitionerGuid || '-1';\n if (client.group) {\n this.groupId = client.group.id;\n }\n this.paymentMethodId = client.paymentMethodId;\n this.overridePayAtClinic = client?.overridePayAtClinic;\n cache.searchStore.excludedPackages.replace(client.excludedPackages);\n }\n}\n\nexport default AuthStore;\n"], "mappings": "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", "names": ["init_virtual_process_polyfill", "init_buffer", "AuthStoreContext", "useAuthStore", "context_v2_default", "AuthStore", "forename", "surname", "title", "email", "password", "res", "client", "Authenticate", "err", "customer", "isAuthenticated", "hasPassKey", "twoFactorSetup", "twoFactorAllowSms", "twoFactorRequired", "twoFactorAuthenticated", "meta", "auth_store_default", "setTokens", "saveRefreshToken", "OnlineCurrentUserRequest", "runInAction", "clearToken", "OnlineLogoutRequest", "id", "reference", "mobileTelephone", "cache_default", "__name", "__decorateClass", "observable", "computed", "action"] }