{
  "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>('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"]
}