woodsportal-client-sdk 4.0.7-dev.5 → 4.0.7-dev.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (43) hide show
  1. package/dist/adapters/angular/index.js +5 -5
  2. package/dist/adapters/react/index.js +5 -5
  3. package/dist/adapters/vue/index.js +5 -5
  4. package/dist/auth-utils-TBV525GT.js +5 -0
  5. package/dist/{auth-utils-DM4YHWIH.js.map → auth-utils-TBV525GT.js.map} +1 -1
  6. package/dist/{chunk-CJZF3RTE.js → chunk-2MVPOZLC.js} +6 -6
  7. package/dist/{chunk-CJZF3RTE.js.map → chunk-2MVPOZLC.js.map} +1 -1
  8. package/dist/{chunk-WDCNNYEH.js → chunk-2WEYX3MP.js} +4 -4
  9. package/dist/{chunk-WDCNNYEH.js.map → chunk-2WEYX3MP.js.map} +1 -1
  10. package/dist/{chunk-FZYOTYDA.js → chunk-AHRXDJPS.js} +8 -93
  11. package/dist/chunk-AHRXDJPS.js.map +1 -0
  12. package/dist/{chunk-AL3JKMCX.js → chunk-CCAQQMPV.js} +3 -3
  13. package/dist/{chunk-AL3JKMCX.js.map → chunk-CCAQQMPV.js.map} +1 -1
  14. package/dist/{chunk-6IGCVIVV.js → chunk-CN4SBWOW.js} +5 -5
  15. package/dist/{chunk-6IGCVIVV.js.map → chunk-CN4SBWOW.js.map} +1 -1
  16. package/dist/{chunk-KYZRYIB3.js → chunk-DO3WO2RP.js} +112 -5
  17. package/dist/chunk-DO3WO2RP.js.map +1 -0
  18. package/dist/{chunk-2EFT76XX.js → chunk-G6DE4XWP.js} +7 -7
  19. package/dist/{chunk-2EFT76XX.js.map → chunk-G6DE4XWP.js.map} +1 -1
  20. package/dist/{chunk-2SZ2WQGG.js → chunk-IBLDCOQU.js} +6 -5
  21. package/dist/chunk-IBLDCOQU.js.map +1 -0
  22. package/dist/{chunk-XANZNL46.js → chunk-NXGSFLJS.js} +6 -3
  23. package/dist/chunk-NXGSFLJS.js.map +1 -0
  24. package/dist/cross-tab-session-ORPEUNVO.js +9 -0
  25. package/dist/{cross-tab-session-NJCGCGJM.js.map → cross-tab-session-ORPEUNVO.js.map} +1 -1
  26. package/dist/entries/auth.d.ts +2 -2
  27. package/dist/entries/auth.js +6 -6
  28. package/dist/entries/auth.js.map +1 -1
  29. package/dist/entries/crm.js +8 -8
  30. package/dist/{http-errors-OKY0E5C5.d.ts → http-errors-CCCQECil.d.ts} +2 -1
  31. package/dist/index.d.ts +2 -2
  32. package/dist/index.js +13 -13
  33. package/dist/index.js.map +1 -1
  34. package/dist/storage-migration-GGAKD4Q3.js +4 -0
  35. package/dist/{storage-migration-TFF6IQTD.js.map → storage-migration-GGAKD4Q3.js.map} +1 -1
  36. package/package.json +1 -1
  37. package/dist/auth-utils-DM4YHWIH.js +0 -5
  38. package/dist/chunk-2SZ2WQGG.js.map +0 -1
  39. package/dist/chunk-FZYOTYDA.js.map +0 -1
  40. package/dist/chunk-KYZRYIB3.js.map +0 -1
  41. package/dist/chunk-XANZNL46.js.map +0 -1
  42. package/dist/cross-tab-session-NJCGCGJM.js +0 -9
  43. package/dist/storage-migration-TFF6IQTD.js +0 -4
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/main/core/auth/mfa-pending-token-storage.ts","../src/main/core/auth/session-contract.ts","../src/main/core/http/session-persistence-error.ts","../src/main/core/http/login-session.ts","../src/main/features/auth/api/authentication.ts","../src/main/features/auth/api/mfa.ts","../src/main/features/auth/api/security.ts","../src/main/features/auth/api/login-bootstrap.ts","../src/main/features/auth/api/sso.ts","../src/main/features/auth/api/users.ts","../src/main/api/nested-auth-api.ts","../src/main/core/auth/bootstrap-contract.ts","../src/main/core/auth/route-guard-contract.ts"],"names":["actions"],"mappings":"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","file":"chunk-FZYOTYDA.js","sourcesContent":["import { WP_STORAGE_KEYS } from '../utils/wp-storage-keys.js'\n\nexport type MfaStorageLane = 'c' | 'a'\n\ntype MfaPendingTokenKeys = {\n token: string\n exp: string\n}\n\nfunction keysForLane(lane: MfaStorageLane): MfaPendingTokenKeys {\n const mfa = lane === 'a' ? WP_STORAGE_KEYS.a.mfa : WP_STORAGE_KEYS.c.mfa\n return {\n token: mfa.pendingToken,\n exp: mfa.pendingTokenExp\n }\n}\n\nexport type MfaPendingAccessToken = {\n token: string\n expiresAt: number\n}\n\nfunction readExpiresAt(raw: string | null): number | null {\n if (raw == null || raw === '') {\n return null\n }\n const parsed = Number(raw)\n return Number.isFinite(parsed) ? parsed : null\n}\n\nfunction getSessionStorage(): Storage | null {\n if (typeof globalThis === 'undefined') {\n return null\n }\n try {\n return globalThis.sessionStorage ?? null\n } catch {\n return null\n }\n}\n\n/** Persist temp MFA access JWT for mid-gate page refresh (tab-scoped sessionStorage). */\nexport function storeMfaPendingAccessToken(token: string, expiresInSeconds: number | undefined, lane: MfaStorageLane = 'c'): void {\n const storage = getSessionStorage()\n if (!storage) {\n return\n }\n if (!token || typeof token !== 'string') {\n return\n }\n\n const keys = keysForLane(lane)\n const expiresAt =\n typeof expiresInSeconds === 'number' && expiresInSeconds > 0 ? Date.now() + expiresInSeconds * 1000 : Date.now() + 15 * 60 * 1000\n\n try {\n storage.setItem(keys.token, token)\n storage.setItem(keys.exp, String(expiresAt))\n } catch {\n // ignore quota / private mode\n }\n}\n\n/** Read temp MFA JWT if present and not expired. */\nexport function readMfaPendingAccessToken(lane: MfaStorageLane = 'c'): MfaPendingAccessToken | null {\n const storage = getSessionStorage()\n if (!storage) {\n return null\n }\n\n const keys = keysForLane(lane)\n try {\n const token = storage.getItem(keys.token)\n if (!token) {\n return null\n }\n\n const expiresAt = readExpiresAt(storage.getItem(keys.exp))\n if (expiresAt == null || Date.now() >= expiresAt) {\n clearMfaPendingAccessToken(lane)\n return null\n }\n\n return { token, expiresAt }\n } catch {\n return null\n }\n}\n\nexport function clearMfaPendingAccessToken(lane: MfaStorageLane = 'c'): void {\n const storage = getSessionStorage()\n if (!storage) {\n return\n }\n\n const keys = keysForLane(lane)\n try {\n storage.removeItem(keys.token)\n storage.removeItem(keys.exp)\n } catch {\n // ignore\n }\n}\n\nexport type HydrateMfaPendingAccessTokenInput = {\n lane?: MfaStorageLane\n setAccessToken: (token: string, expiresInSeconds?: number) => void | Promise<void>\n}\n\n/** Restore in-memory MFA temp JWT from sessionStorage after refresh. Returns true when hydrated. */\nexport async function hydrateMfaPendingAccessToken(input: HydrateMfaPendingAccessTokenInput): Promise<boolean> {\n const lane = input.lane ?? 'c'\n const pending = readMfaPendingAccessToken(lane)\n if (!pending) {\n return false\n }\n\n const ttlSeconds = Math.max(1, Math.floor((pending.expiresAt - Date.now()) / 1000))\n await input.setAccessToken(pending.token, ttlSeconds)\n return true\n}\n","/**\n * Shared session predicates for client and admin portals.\n * Apps supply lane-specific refresh hints (cookie name / timing cookie).\n */\n\nexport type SessionContractInput = {\n /** In-memory access JWT present. */\n hasAccessToken: () => boolean\n /** Access JWT expired or within proactive refresh buffer. */\n isAccessTokenExpired: () => boolean\n /** Refresh session still valid (cookie / timing hint). */\n hasRefreshSession: () => boolean\n /** MFA gate: temp JWT + pending context. */\n isMfaPending?: () => boolean\n}\n\nexport function hasValidAccess(input: SessionContractInput): boolean {\n return input.hasAccessToken() && !input.isAccessTokenExpired()\n}\n\nexport function isFullyAuthenticated(input: SessionContractInput): boolean {\n if (input.isMfaPending?.()) {\n return false\n }\n if (hasValidAccess(input)) {\n return true\n }\n return input.hasRefreshSession()\n}\n\nexport function isMfaPendingSession(input: SessionContractInput): boolean {\n return Boolean(input.isMfaPending?.())\n}\n\nexport function hasAuthenticatedAccess(input: SessionContractInput): boolean {\n if (input.isMfaPending?.()) {\n return Boolean(input.hasAccessToken())\n }\n return hasValidAccess(input)\n}\n","/** Thrown when a full login response cannot be persisted (e.g. missing refresh token). */\nexport class SessionPersistenceError extends Error {\n constructor(message: string) {\n super(message)\n this.name = 'SessionPersistenceError'\n }\n}\n","import { setPortal, setSubscriptionType, setAccessToken, setRefreshToken, setLoggedInDetails } from './auth-utils'\nimport { setConfig } from '../utils/hub-context'\nimport { actions as userActions } from '../../state/crm/use-user'\nimport { SessionPersistenceError } from './session-persistence-error'\nimport { logger } from '../logging/logger'\nimport { clearMfaPendingAccessToken, storeMfaPendingAccessToken } from '../auth/mfa-pending-token-storage.js'\n\nfunction unwrapLoginBody(response: any): Record<string, any> {\n return (response?.data ?? response ?? {}) as Record<string, any>\n}\n\n/**\n * Persists a full authenticated session (access + refresh tokens, portal, login details).\n * Use after successful login or MFA verify when `twoFactorRequired` is false.\n */\nexport async function completeLoginSession(response: any): Promise<any> {\n const body = unwrapLoginBody(response)\n const tokenData: any = body?.tokenData || {}\n const loggedInDetails: any = body?.loggedInDetails || {}\n const currentPortal: any = loggedInDetails?.currentPortal || {}\n const currentPortalId: any = currentPortal?.portalId || null\n const subscriptionType = loggedInDetails?.subscriptionType || 'BASIC'\n\n const token = tokenData?.token\n const refreshToken = tokenData?.refreshToken\n const expiresIn = tokenData?.expiresIn\n const refreshExpiresAt = tokenData?.refreshExpiresAt\n const rExpiresIn = tokenData?.refreshExpiresIn\n\n if (!token || typeof token !== 'string') {\n logger.error('auth', 'login session missing access token', { operation: 'completeLoginSession' })\n throw new SessionPersistenceError('Session persistence failed: missing access token in login response')\n }\n\n if (!refreshToken || typeof refreshToken !== 'string') {\n logger.error('auth', 'login session missing refresh token', { operation: 'completeLoginSession' })\n throw new SessionPersistenceError('Session persistence failed: missing refresh token in login response')\n }\n\n setPortal(currentPortal)\n setSubscriptionType(subscriptionType)\n await setAccessToken(token, expiresIn)\n await setRefreshToken(refreshToken, refreshExpiresAt ?? rExpiresIn)\n await setLoggedInDetails(body)\n userActions.setProfile(response?.data != null ? response : { data: body })\n\n setConfig.setDevPortalId(currentPortalId)\n\n clearMfaPendingAccessToken('c')\n\n return response\n}\n\n/**\n * Applies login/MFA-step response token rules:\n * - MFA pending: temp access JWT only (no refresh until verify completes)\n * - Full session: {@link completeLoginSession}\n */\nexport async function applyLoginResponse(response: any): Promise<any> {\n const data = unwrapLoginBody(response)\n if (data?.twoFactorRequired === true) {\n const tokenData: any = data?.tokenData || {}\n const token = tokenData?.token\n const expiresIn = tokenData?.expiresIn\n if (token) {\n await setAccessToken(token, expiresIn)\n storeMfaPendingAccessToken(token, expiresIn, 'c')\n }\n return response\n }\n return completeLoginSession(response)\n}\n","import { Client } from '../../../core/http/client-assembler'\nimport type {\n LoginPayload,\n LoginResponseData,\n MutationOptions,\n PreLoginPayload,\n ForgetPasswordPayload,\n VerifyEmailPayload,\n ResetPasswordVerifyTokenPayload,\n ResetPasswordPayload\n} from '../../../core/types'\nimport { createMutation } from '../../../core/mutation/createMutation'\nimport { applyLoginResponse } from '../../../core/http/login-session'\nimport { getParam } from '../../../core/utils/param'\nimport { clearClientAuthCookies } from '../../../core/utils/cookie'\nimport { clearAccessToken } from '../../../core/http/token-store'\n\nexport function preLogin(options?: MutationOptions<any, any>) {\n const { mutate, isLoading } = createMutation<PreLoginPayload, any>(async (payload: any) => {\n const response: any = await Client.authentication.preLogin(payload)\n return response\n }, options)\n\n return {\n mutate,\n preLogin: mutate,\n isLoading\n }\n}\n\n/**\n * Password login for the client portal.\n *\n * **API:** `POST /api/auth/login?hubId={hubId}`\n * **Session:** When `twoFactorRequired` is true, stores only the temp access JWT (no refresh until MFA completes).\n */\nexport function login(options?: MutationOptions<LoginResponseData, any>) {\n const { mutate, isLoading } = createMutation<LoginPayload, LoginResponseData>(async (payload: any) => {\n const response = (await Client.authentication.login(payload)) as LoginResponseData\n await applyLoginResponse(response)\n return response\n }, options)\n\n return {\n mutate,\n login: mutate,\n isLoading\n }\n}\n\nexport interface ClientSessionPayload {\n accessToken: string\n refreshToken?: string\n}\n\n/**\n * Exchange a management/deep-link token for a portal client session.\n *\n * **API:** `POST /api/auth/client-session`\n * **Auth:** Bearer access token header; optional refresh token in body.\n */\nexport interface AuthHandoffPayload {\n code: string\n hubId: number\n}\n\n/**\n * Redeem a one-time admin portal handoff code for a full client session.\n *\n * **API:** `POST /api/auth/handoff?hubId={hubId}`\n */\nexport function handoff(options?: MutationOptions<LoginResponseData, any>) {\n const { mutate, isLoading } = createMutation<AuthHandoffPayload, LoginResponseData>(async (payload) => {\n const response = (await Client.authentication.handoff(payload!)) as LoginResponseData\n await applyLoginResponse(response)\n return response\n }, options)\n\n return {\n mutate,\n handoff: mutate,\n isLoading\n }\n}\n\nexport function clientSession(options?: MutationOptions<LoginResponseData, any>) {\n const { mutate, isLoading } = createMutation<ClientSessionPayload, LoginResponseData>(async (payload?: ClientSessionPayload) => {\n const response = (await Client.authentication.clientSession(payload!)) as LoginResponseData\n await applyLoginResponse(response)\n return response\n }, options)\n\n return {\n mutate,\n clientSession: mutate,\n isLoading\n }\n}\n\nexport function register(options?: MutationOptions<any, any>) {\n const { mutate, isLoading } = createMutation<any, any>(async (payload: any) => {\n const response: any = await Client.authentication.register(payload)\n return response\n }, options)\n\n return {\n mutate,\n register: mutate,\n isLoading\n }\n}\n\nexport function verifyEmail(options?: MutationOptions<any, any>) {\n const { mutate, isLoading } = createMutation<VerifyEmailPayload, any>(async (payload: any) => {\n const verifyEmailPayload: VerifyEmailPayload = payload || {}\n const token: any = getParam('token')\n if (!verifyEmailPayload?.token) verifyEmailPayload.token = token\n const response: any = await Client.authentication.verifyEmail(verifyEmailPayload)\n return response\n }, options)\n\n return {\n mutate,\n verifyEmail: mutate,\n isLoading\n }\n}\n\nexport function resetPasswordVerifyToken(options?: MutationOptions<any, any>) {\n const { mutate, isLoading } = createMutation<ResetPasswordVerifyTokenPayload, any>(async (payload: any) => {\n const resetPasswordVerifyTokenPayload: ResetPasswordVerifyTokenPayload = payload || {}\n const token: any = getParam('token')\n if (!resetPasswordVerifyTokenPayload?.token) resetPasswordVerifyTokenPayload.token = token\n const response: any = await Client.authentication.resetPasswordVerifyToken(resetPasswordVerifyTokenPayload)\n return response\n }, options)\n\n return {\n mutate,\n resetPasswordVerifyToken: mutate,\n isLoading\n }\n}\n\nexport function resetPassword(options?: MutationOptions<any, any>) {\n const { mutate, isLoading } = createMutation<ResetPasswordPayload, any>(async (payload: any) => {\n const response: any = await Client.authentication.resetPassword(payload)\n return response\n }, options)\n\n return {\n mutate,\n resetPassword: mutate,\n isLoading\n }\n}\n\nexport function forgetPassword(options?: MutationOptions<any, any>) {\n const { mutate, isLoading } = createMutation<ForgetPasswordPayload, any>(async (payload: any) => {\n const response: any = await Client.authentication.forgetPassword(payload)\n return response\n }, options)\n\n return {\n mutate,\n forgetPassword: mutate,\n isLoading\n }\n}\n\nexport function logout(options?: MutationOptions<any, any>) {\n const { mutate, isLoading } = createMutation(async () => {\n try {\n const response: any = await Client.authentication.logout()\n return response\n } finally {\n clearAccessToken()\n clearClientAuthCookies()\n }\n }, options)\n\n return {\n mutate,\n logout: mutate,\n isLoading\n }\n}\n\nexport function registerExistingUser(options?: MutationOptions<any, any>) {\n const { mutate, isLoading } = createMutation<any, any>(async (payload: any) => {\n const response: any = await Client.authentication.registerExistingUser(payload)\n return response\n }, options)\n\n return {\n mutate,\n registerExistingUser: mutate,\n isLoading\n }\n}\n\nexport function verifyEmailResend(options?: MutationOptions<any, any>) {\n const { mutate, isLoading } = createMutation<any, any>(async (payload: any) => {\n const response: any = await Client.authentication.verifyEmailResend(payload)\n return response\n }, options)\n\n return {\n mutate,\n verifyEmailResend: mutate,\n isLoading\n }\n}\n\nexport function resendEmail(options?: MutationOptions<any, any>) {\n const { mutate, isLoading } = createMutation<any, any>(async (payload: any) => {\n const response: any = await Client.authentication.resendEmail(payload)\n return response\n }, options)\n\n return {\n mutate,\n resendEmail: mutate,\n isLoading\n }\n}\n","import { Client } from '../../../core/http/client-assembler'\nimport { createMutation } from '../../../core/mutation/createMutation'\nimport { applyLoginResponse } from '../../../core/http/login-session'\nimport type {\n LoginResponseData,\n MfaEnrollmentStatus,\n MfaOtpSendRequest,\n MfaPendingPasskeyOptionsRequest,\n MfaPendingPasskeyVerifyRequest,\n MfaPreferenceRequest,\n MfaStatusQuery,\n MutationOptions,\n PasskeyLoginOptionsRequest,\n PasskeyLoginVerifyRequest,\n PhoneVerifyConfirmRequest,\n PhoneVerifyStartRequest,\n BackupCodesRegenerateRequest,\n MfaBackupCodesResponse,\n MfaOptOutRequest,\n PhoneUnverifyRequest,\n TotpDisableRequest,\n TotpEnrollVerifyRequest,\n TwoFaVerificationRequest,\n WebAuthnVerifyRequest\n} from '../../../core/types'\n\n/**\n * Complete the MFA login step after `api.login()` returned `twoFactorRequired: true`.\n *\n * **API:** `POST /api/auth/verify-otp?hubId={hubId}`\n * **Auth:** Bearer temp JWT; body `{ token, otp, method }` (`EMAIL_OTP` | `SMS_OTP` | `TOTP` | `BACKUP_CODE`).\n * **Session:** On success persists full access + refresh tokens (skips when still MFA-pending).\n */\nexport function verifyOtp(options?: MutationOptions<LoginResponseData, any>) {\n const { mutate, isLoading } = createMutation<TwoFaVerificationRequest, LoginResponseData>(async (payload?: TwoFaVerificationRequest) => {\n const response = (await Client.authentication.verifyOtp(payload!)) as LoginResponseData\n await applyLoginResponse(response)\n return response\n }, options)\n\n return { mutate, verifyOtp: mutate, isLoading }\n}\n\n/**\n * Resend OTP or switch to email/SMS on the MFA login gate.\n *\n * **API:** `POST /api/auth/mfa/pending/otp/send`\n * **Auth:** Bearer temp JWT; body `{ token, method }`.\n */\nexport function sendMfaOtp(options?: MutationOptions<any, any>) {\n const { mutate, isLoading } = createMutation<MfaOtpSendRequest, any>(\n async (payload?: MfaOtpSendRequest) => Client.mfa.sendPendingOtp(payload!),\n options\n )\n\n return { mutate, sendOtp: mutate, sendMfaOtp: mutate, isLoading }\n}\n\n/**\n * Start WebAuthn ceremony for passkey as second factor during login.\n *\n * **API:** `POST /api/auth/mfa/pending/passkey/authenticate/options`\n * **Auth:** Bearer temp JWT; body `{ token, portalId? }`.\n */\nexport function pendingPasskeyOptions(options?: MutationOptions<any, any>) {\n const { mutate, isLoading } = createMutation<MfaPendingPasskeyOptionsRequest, any>(\n async (payload?: MfaPendingPasskeyOptionsRequest) => Client.mfa.pendingPasskeyOptions(payload!),\n options\n )\n\n return { mutate, pendingPasskeyOptions: mutate, isLoading }\n}\n\n/**\n * Finish passkey MFA-step and complete login when successful.\n *\n * **API:** `POST /api/auth/mfa/pending/passkey/authenticate/verify?hubId={hubId}`\n * **Auth:** Bearer temp JWT; body `{ token, challengeId, credential, portalId? }`.\n * **Session:** On success persists full access + refresh tokens.\n */\nexport function pendingPasskeyVerify(options?: MutationOptions<LoginResponseData, any>) {\n const { mutate, isLoading } = createMutation<MfaPendingPasskeyVerifyRequest, LoginResponseData>(\n async (payload?: MfaPendingPasskeyVerifyRequest) => {\n const response = (await Client.mfa.pendingPasskeyVerify(payload!)) as LoginResponseData\n await applyLoginResponse(response)\n return response\n },\n options\n )\n\n return { mutate, pendingPasskeyVerify: mutate, isLoading }\n}\n\n/**\n * MFA enrollment and policy snapshot for the security settings UI.\n *\n * **API:** `GET /api/auth/mfa/status?portalId={portalId}`\n * **Auth:** Bearer access JWT (full session).\n */\nexport function getMfaStatus(options?: MutationOptions<MfaEnrollmentStatus, any>) {\n const { mutate, isLoading } = createMutation<MfaStatusQuery | undefined, MfaEnrollmentStatus>(\n async (payload) => (await Client.mfa.getStatus(payload)) as MfaEnrollmentStatus,\n options\n )\n\n return { mutate, getStatus: mutate, getMfaStatus: mutate, isLoading }\n}\n\n/**\n * Set the user's default MFA method for this hub/portal scope.\n *\n * **API:** `PUT /api/auth/mfa/preferences?portalId={portalId}`\n * **Auth:** Bearer access JWT; body `{ defaultMethod }`.\n */\nexport function setMfaPreferences(options?: MutationOptions<any, any>) {\n const { mutate, isLoading } = createMutation<MfaPreferenceRequest & MfaStatusQuery, any>(\n async (payload?: MfaPreferenceRequest & MfaStatusQuery) => {\n const { portalId, ...data } = payload!\n return Client.mfa.setPreferences(data, { portalId })\n },\n options\n )\n\n return { mutate, setPreferences: mutate, setMfaPreferences: mutate, isLoading }\n}\n\n/**\n * Send OTP to verify the user's phone number (enables SMS OTP at login).\n *\n * **API:** `POST /api/auth/mfa/phone/verify/start?portalId={portalId}`\n * **Auth:** Bearer access JWT; body `{ phone }` (E.164, e.g. `+14155552671`).\n */\nexport function startPhoneVerify(options?: MutationOptions<any, any>) {\n const { mutate, isLoading } = createMutation<PhoneVerifyStartRequest & MfaStatusQuery, any>(async (payload) => {\n const { portalId, ...data } = payload ?? { phone: '' }\n return Client.mfa.startPhoneVerify(data, portalId != null ? { portalId } : undefined)\n }, options)\n\n return { mutate, startPhoneVerify: mutate, isLoading }\n}\n\n/**\n * Confirm phone verification with the OTP code.\n *\n * **API:** `POST /api/auth/mfa/phone/verify/confirm?portalId={portalId}`\n * **Auth:** Bearer access JWT; body `{ phone, code }`.\n */\nexport function confirmPhoneVerify(options?: MutationOptions<any, any>) {\n const { mutate, isLoading } = createMutation<PhoneVerifyConfirmRequest & MfaStatusQuery, any>(async (payload) => {\n const { portalId, ...data } = payload ?? { phone: '', code: '' }\n return Client.mfa.confirmPhoneVerify(data, portalId != null ? { portalId } : undefined)\n }, options)\n\n return { mutate, confirmPhoneVerify: mutate, isLoading }\n}\n\n/**\n * Start TOTP authenticator enrollment for the current portal scope.\n *\n * **API:** `POST /api/auth/mfa/totp/enroll/start?portalId={portalId}`\n * **Auth:** Bearer access JWT. Returns `secret`, `otpauthUri`, `scopeKey`.\n */\nexport function totpEnrollStart(options?: MutationOptions<any, any>) {\n const { mutate, isLoading } = createMutation<MfaStatusQuery | undefined, any>(async (payload) => Client.mfa.totpEnrollStart(payload), options)\n\n return { mutate, totpEnrollStart: mutate, isLoading }\n}\n\n/**\n * Confirm TOTP enrollment and receive one-time backup codes.\n *\n * **API:** `POST /api/auth/mfa/totp/enroll/verify?portalId={portalId}`\n * **Auth:** Bearer access JWT; body `{ code, portalId? }`.\n */\nexport function totpEnrollVerify(options?: MutationOptions<any, any>) {\n const { mutate, isLoading } = createMutation<TotpEnrollVerifyRequest, any>(\n async (payload?: TotpEnrollVerifyRequest) => Client.mfa.totpEnrollVerify(payload!),\n options\n )\n\n return { mutate, totpEnrollVerify: mutate, isLoading }\n}\n\n/**\n * Disable TOTP for the current scope (requires current password).\n *\n * **API:** `POST /api/auth/mfa/totp/disable`\n * **Auth:** Bearer access JWT; body `{ password }`.\n */\nexport function totpDisable(options?: MutationOptions<any, any>) {\n const { mutate, isLoading } = createMutation<TotpDisableRequest & MfaStatusQuery, any>(async (payload?: TotpDisableRequest & MfaStatusQuery) => {\n const { portalId, ...data } = payload!\n return Client.mfa.totpDisable(data, { portalId })\n }, options)\n\n return { mutate, totpDisable: mutate, isLoading }\n}\n\n/**\n * Remove SMS MFA by clearing phone verification for the current scope.\n *\n * **API:** `POST /api/auth/mfa/phone/unverify?portalId={portalId}`\n */\nexport function phoneUnverify(options?: MutationOptions<any, any>) {\n const { mutate, isLoading } = createMutation<PhoneUnverifyRequest & MfaStatusQuery, any>(\n async (payload?: PhoneUnverifyRequest & MfaStatusQuery) => {\n const { portalId, ...data } = payload!\n return Client.mfa.phoneUnverify(data, { portalId })\n },\n options\n )\n\n return { mutate, phoneUnverify: mutate, isLoading }\n}\n\n/**\n * Regenerate backup codes (password + TOTP step-up). Plaintext codes returned once.\n *\n * **API:** `POST /api/auth/mfa/backup-codes/regenerate?portalId={portalId}`\n */\nexport function backupCodesRegenerate(options?: MutationOptions<MfaBackupCodesResponse, any>) {\n const { mutate, isLoading } = createMutation<BackupCodesRegenerateRequest & MfaStatusQuery, MfaBackupCodesResponse>(\n async (payload?: BackupCodesRegenerateRequest & MfaStatusQuery) => {\n const { portalId, ...data } = payload!\n return Client.mfa.backupCodesRegenerate(data, { portalId })\n },\n options\n )\n\n return { mutate, backupCodesRegenerate: mutate, isLoading }\n}\n\n/**\n * Turn off all voluntary MFA enrollments when policy allows.\n *\n * **API:** `POST /api/auth/mfa/opt-out?portalId={portalId}`\n */\nexport function mfaOptOut(options?: MutationOptions<any, any>) {\n const { mutate, isLoading } = createMutation<MfaOptOutRequest & MfaStatusQuery, any>(async (payload?: MfaOptOutRequest & MfaStatusQuery) => {\n const { portalId, ...data } = payload!\n return Client.mfa.optOut(data, { portalId })\n }, options)\n\n return { mutate, optOut: mutate, mfaOptOut: mutate, isLoading }\n}\n\n/**\n * Start passkey (WebAuthn) registration ceremony.\n *\n * **API:** `POST /api/auth/mfa/webauthn/register/options?portalId={portalId}`\n * **Auth:** Bearer access JWT.\n */\nexport function webauthnRegisterOptions(options?: MutationOptions<any, any>) {\n const { mutate, isLoading } = createMutation<MfaStatusQuery | undefined, any>(\n async (payload) => Client.mfa.webauthnRegisterOptions(payload),\n options\n )\n\n return { mutate, webauthnRegisterOptions: mutate, isLoading }\n}\n\n/**\n * Complete passkey registration after `@simplewebauthn/browser` ceremony.\n *\n * **API:** `POST /api/auth/mfa/webauthn/register/verify?portalId={portalId}`\n * **Auth:** Bearer access JWT; body `{ challengeId, credential, nickname?, portalId? }`.\n */\nexport function webauthnRegisterVerify(options?: MutationOptions<any, any>) {\n const { mutate, isLoading } = createMutation<WebAuthnVerifyRequest, any>(\n async (payload?: WebAuthnVerifyRequest) => Client.mfa.webauthnRegisterVerify(payload!),\n options\n )\n\n return { mutate, webauthnRegisterVerify: mutate, isLoading }\n}\n\n/**\n * Start passkey authentication ceremony while logged in (re-verify).\n *\n * **API:** `POST /api/auth/mfa/webauthn/authenticate/options?portalId={portalId}`\n * **Auth:** Bearer access JWT.\n */\nexport function webauthnAuthOptions(options?: MutationOptions<any, any>) {\n const { mutate, isLoading } = createMutation<MfaStatusQuery | undefined, any>(async (payload) => Client.mfa.webauthnAuthOptions(payload), options)\n\n return { mutate, webauthnAuthOptions: mutate, isLoading }\n}\n\n/**\n * Complete logged-in passkey re-verification.\n *\n * **API:** `POST /api/auth/mfa/webauthn/authenticate/verify?portalId={portalId}`\n * **Auth:** Bearer access JWT; body `{ challengeId, credential, portalId? }`.\n */\nexport function webauthnAuthVerify(options?: MutationOptions<any, any>) {\n const { mutate, isLoading } = createMutation<WebAuthnVerifyRequest, any>(\n async (payload?: WebAuthnVerifyRequest) => Client.mfa.webauthnAuthVerify(payload!),\n options\n )\n\n return { mutate, webauthnAuthVerify: mutate, isLoading }\n}\n\n/**\n * List passkeys registered for the portal scope.\n *\n * **API:** `GET /api/auth/mfa/webauthn/credentials?portalId={portalId}`\n * **Auth:** Bearer access JWT.\n */\nexport function listWebauthnCredentials(options?: MutationOptions<any, any>) {\n const { mutate, isLoading } = createMutation<MfaStatusQuery | undefined, any>(\n async (payload) => Client.mfa.listWebauthnCredentials(payload),\n options\n )\n\n return { mutate, listWebauthnCredentials: mutate, isLoading }\n}\n\n/**\n * Remove a registered passkey.\n *\n * **API:** `DELETE /api/auth/mfa/webauthn/credentials/{credentialRecordId}?portalId={portalId}`\n * **Auth:** Bearer access JWT.\n */\nexport function deleteWebauthnCredential(options?: MutationOptions<any, any>) {\n const { mutate, isLoading } = createMutation<{ credentialRecordId: string | number } & MfaStatusQuery, any>(\n async (payload?: { credentialRecordId: string | number } & MfaStatusQuery) => {\n const { credentialRecordId, portalId } = payload!\n return Client.mfa.deleteWebauthnCredential(credentialRecordId, { portalId })\n },\n options\n )\n\n return { mutate, deleteWebauthnCredential: mutate, isLoading }\n}\n\n/**\n * Start passwordless passkey login (when `PASSKEY_PRIMARY` is allowed).\n *\n * **API:** `POST /api/auth/passkey/login/options?hubId={hubId}`\n * **Auth:** Public; body `{ email, hubId?, portalId? }`.\n */\nexport function passkeyLoginOptions(options?: MutationOptions<any, any>) {\n const { mutate, isLoading } = createMutation<PasskeyLoginOptionsRequest, any>(\n async (payload?: PasskeyLoginOptionsRequest) => Client.mfa.passkeyLoginOptions(payload!),\n options\n )\n\n return { mutate, passkeyLoginOptions: mutate, isLoading }\n}\n\n/**\n * Finish passwordless passkey login; may return `twoFactorRequired` if policy requires MFA.\n *\n * **API:** `POST /api/auth/passkey/login/verify?hubId={hubId}`\n * **Auth:** Public; body `{ challengeId, credential, portalId? }`.\n * **Session:** Applies MFA-aware token rules via {@link applyLoginResponse}.\n */\nexport function passkeyLoginVerify(options?: MutationOptions<LoginResponseData, any>) {\n const { mutate, isLoading } = createMutation<PasskeyLoginVerifyRequest, LoginResponseData>(async (payload?: PasskeyLoginVerifyRequest) => {\n const response = (await Client.mfa.passkeyLoginVerify(payload!)) as LoginResponseData\n await applyLoginResponse(response)\n return response\n }, options)\n\n return { mutate, passkeyLoginVerify: mutate, isLoading }\n}\n","import { Client } from '../../../core/http/client-assembler'\nimport { createMutation } from '../../../core/mutation/createMutation'\nimport type {\n MutationOptions,\n RevokeSecuritySessionPayload,\n SecurityLoginActivityQuery,\n SecurityOverviewQuery,\n SecuritySessionsQuery\n} from '../../../core/types'\n\n/**\n * Security settings overview (password age, MFA methods, policy flags).\n * Use this for the Security page — not `api.me()` + `api.getMfaStatus()`.\n *\n * **API:** `GET /api/auth/security/overview?portalId={portalId}`\n * **Auth:** Bearer access JWT.\n */\nexport function getSecurityOverview(options?: MutationOptions<any, any>) {\n const { mutate, isLoading } = createMutation<SecurityOverviewQuery | undefined, any>(\n async (payload) => Client.security.getOverview(payload),\n options\n )\n\n return { mutate, getOverview: mutate, getSecurityOverview: mutate, isLoading }\n}\n\n/**\n * Paginated login activity for the Security page.\n *\n * **API:** `GET /api/auth/security/login-activity?page=&limit=&sort=`\n * **Auth:** Bearer access JWT.\n */\nexport function getSecurityLoginActivity(options?: MutationOptions<any, any>) {\n const { mutate, isLoading } = createMutation<SecurityLoginActivityQuery | undefined, any>(\n async (payload) => Client.security.getLoginActivity(payload),\n options\n )\n\n return { mutate, getLoginActivity: mutate, getSecurityLoginActivity: mutate, isLoading }\n}\n\n/**\n * List active sessions (refresh-token families) for the Security page.\n *\n * **API:** `GET /api/auth/security/sessions?currentFamilyId=`\n * **Auth:** Bearer access JWT; optional `refreshToken` in payload → `X-Refresh-Token` header to mark current session.\n */\nexport function getSecuritySessions(options?: MutationOptions<any, any>) {\n const { mutate, isLoading } = createMutation<SecuritySessionsQuery | undefined, any>(\n async (payload) => Client.security.getSessions(payload),\n options\n )\n\n return { mutate, getSessions: mutate, getSecuritySessions: mutate, isLoading }\n}\n\n/**\n * Sign out a single device/session by `familyId`.\n *\n * **API:** `POST /api/auth/security/sessions/{familyId}/revoke`\n * **Auth:** Bearer access JWT; optional `refreshToken` in payload.\n */\nexport function revokeSecuritySession(options?: MutationOptions<any, any>) {\n const { mutate, isLoading } = createMutation<RevokeSecuritySessionPayload, any>(\n async (payload?: RevokeSecuritySessionPayload) => Client.security.revokeSession(payload!),\n options\n )\n\n return { mutate, revokeSession: mutate, revokeSecuritySession: mutate, isLoading }\n}\n\n/**\n * Sign out all other devices; keeps the current session when `refreshToken` is provided.\n *\n * **API:** `POST /api/auth/security/sessions/revoke-others`\n * **Auth:** Bearer access JWT; optional `refreshToken` in payload → `X-Refresh-Token` header.\n */\nexport function revokeOtherSecuritySessions(options?: MutationOptions<any, any>) {\n const { mutate, isLoading } = createMutation<{ refreshToken?: string } | undefined, any>(\n async (payload) => Client.security.revokeOtherSessions(payload?.refreshToken),\n options\n )\n\n return { mutate, revokeOtherSessions: mutate, revokeOtherSecuritySessions: mutate, isLoading }\n}\n","import { Client } from '../../../core/http/client-assembler'\nimport type { MutationOptions } from '../../../core/types'\nimport { createMutation } from '../../../core/mutation/createMutation'\n\nexport function getLoginBootstrap(options?: MutationOptions<any, { hubId?: number; portalId?: number } | void>) {\n const { mutate, isLoading } = createMutation(async (payload?: { hubId?: number; portalId?: number }) => {\n const response: any = await Client.authentication.getLoginBootstrap(payload)\n return response\n }, options)\n\n return {\n mutate,\n getLoginBootstrap: mutate,\n isLoading\n }\n}\n","import { Client } from '../../../core/http/client-assembler'\nimport type { MutationOptions, PreLoginPayload } from '../../../core/types'\nimport { createMutation } from '../../../core/mutation/createMutation'\nimport { applyLoginResponse } from '../../../core/http/login-session'\n\nexport function getSsoDetails(options?: MutationOptions<any, any>) {\n const { mutate, isLoading } = createMutation(async () => {\n const response: any = await Client.sso.getSsoDetails()\n return response\n }, options)\n\n return {\n mutate,\n getDetails: mutate,\n getSsoDetails: mutate,\n isLoading\n }\n}\n\nexport function generateSsoUrl(options?: MutationOptions<any, any>) {\n const { mutate, isLoading } = createMutation<PreLoginPayload, any>(async (payload: any) => {\n const response: any = await Client.sso.generateSsoUrl(payload)\n return response\n }, options)\n\n return {\n mutate,\n generateUrl: mutate,\n generateSsoUrl: mutate,\n isLoading\n }\n}\n\nexport function ssoCallback(options?: MutationOptions<any, any>) {\n const { mutate, isLoading } = createMutation<PreLoginPayload, any>(async (payload: any) => {\n const response: any = await Client.sso.ssoCallback(payload)\n await applyLoginResponse(response)\n return response\n }, options)\n\n return {\n mutate,\n callback: mutate,\n ssoCallback: mutate,\n isLoading\n }\n}\n","import { Client } from '../../../core/http/client-assembler'\nimport type { ChangePasswordPayload, MutationOptions } from '../../../core/types'\nimport { createMutation } from '../../../core/mutation/createMutation'\nimport { actions as userActions } from '../../../state/crm/use-user'\n\nlet meRequestInFlight: Promise<any> | null = null\n\nasync function fetchMeOnce() {\n if (!meRequestInFlight) {\n meRequestInFlight = Client.user.me().finally(() => {\n meRequestInFlight = null\n })\n }\n return meRequestInFlight\n}\n\nexport function me(options?: MutationOptions<any, any>) {\n const { mutate, isLoading } = createMutation(async () => {\n const response: any = await fetchMeOnce()\n userActions.setProfile(response)\n return response?.data\n }, options)\n\n return {\n mutate,\n me: mutate,\n isLoading\n }\n}\n\nexport function profile(options?: MutationOptions<any, any>) {\n const { mutate, isLoading } = createMutation(async (paylaod: any) => {\n const response: any = await Client.user.profile(paylaod)\n return response\n }, options)\n\n return {\n mutate,\n profile: mutate,\n isLoading\n }\n}\n\nexport function profileUpdate(options?: MutationOptions<any, any>) {\n const { mutate, isLoading } = createMutation(async (paylaod: any) => {\n const response: any = await Client.user.profileUpdate(paylaod)\n return response\n }, options)\n\n return {\n mutate,\n updateProfile: mutate,\n profileUpdate: mutate,\n isLoading\n }\n}\n\n/** @deprecated Use {@link profileUpdate} — same factory; 3.0 nested key is `updateProfile`. */\nexport const updateProfile = profileUpdate\n\nexport function changePassword(options?: MutationOptions<any, any>) {\n const { mutate, isLoading } = createMutation<ChangePasswordPayload, any>(async (payload: any) => {\n const response: any = await Client.user.changePassword(payload)\n return response\n }, options)\n\n return {\n mutate,\n changePassword: mutate,\n isLoading\n }\n}\n","import {\n preLogin,\n login,\n clientSession,\n handoff,\n register,\n verifyEmail,\n forgetPassword,\n logout,\n resetPasswordVerifyToken,\n resetPassword,\n registerExistingUser,\n verifyEmailResend,\n resendEmail\n} from '../features/auth/api/authentication'\nimport {\n verifyOtp,\n sendMfaOtp,\n pendingPasskeyOptions,\n pendingPasskeyVerify,\n getMfaStatus,\n setMfaPreferences,\n startPhoneVerify,\n confirmPhoneVerify,\n totpEnrollStart,\n totpEnrollVerify,\n totpDisable,\n phoneUnverify,\n backupCodesRegenerate,\n mfaOptOut,\n webauthnRegisterOptions,\n webauthnRegisterVerify,\n webauthnAuthOptions,\n webauthnAuthVerify,\n listWebauthnCredentials,\n deleteWebauthnCredential,\n passkeyLoginOptions,\n passkeyLoginVerify\n} from '../features/auth/api/mfa'\nimport {\n getSecurityOverview,\n getSecurityLoginActivity,\n getSecuritySessions,\n revokeSecuritySession,\n revokeOtherSecuritySessions\n} from '../features/auth/api/security'\nimport { getLoginBootstrap } from '../features/auth/api/login-bootstrap'\nimport { getSsoDetails, generateSsoUrl, ssoCallback } from '../features/auth/api/sso'\nimport { changePassword, me, profile, profileUpdate } from '../features/auth/api/users'\nimport { getRefreshToken, setAccessToken as persistAccessToken } from '../core/http/auth-utils'\nimport { getAuthRefreshToken } from '../core/http/http-client'\nimport {\n clearAccessToken,\n didLastRefreshFail,\n getAccessToken,\n isAuthenticateApp,\n isAuthenticated,\n isExpiresAccessToken,\n isAccessTokenExpired,\n hasRefreshSession,\n hasValidAccessToken,\n isRefreshInFlight,\n isSessionRefreshExhausted,\n refreshSession,\n resetSessionAuthState,\n clearSessionRefreshExhaustedState,\n hydrateSessionRefreshState\n} from '../core/http/token-store'\nimport { isCookieExpired } from '../core/utils/cookie'\nimport {\n hasValidAccess,\n isFullyAuthenticated as isFullyAuthenticatedContract,\n hasAuthenticatedAccess as hasAuthenticatedAccessContract,\n type SessionContractInput\n} from '../core/auth/session-contract'\n\n/** Canonical nested auth API (SDK 3.0). */\nexport const authApi = {\n preLogin,\n login,\n clientSession,\n handoff,\n logout,\n register,\n verifyEmail,\n registerExistingUser,\n forgetPassword,\n resetPassword,\n resetPasswordVerifyToken,\n verifyEmailResend,\n resendEmail,\n changePassword,\n me,\n profile,\n updateProfile: profileUpdate,\n mfa: {\n verifyOtp,\n sendOtp: sendMfaOtp,\n pendingPasskeyOptions,\n pendingPasskeyVerify,\n getStatus: getMfaStatus,\n setPreferences: setMfaPreferences,\n startPhoneVerify,\n confirmPhoneVerify,\n totpEnrollStart,\n totpEnrollVerify,\n totpDisable,\n phoneUnverify,\n backupCodesRegenerate,\n optOut: mfaOptOut,\n mfaOptOut,\n webauthnRegisterOptions,\n webauthnRegisterVerify,\n webauthnAuthOptions,\n webauthnAuthVerify,\n listWebauthnCredentials,\n deleteWebauthnCredential,\n passkeyLoginOptions,\n passkeyLoginVerify\n },\n security: {\n getOverview: getSecurityOverview,\n getLoginActivity: getSecurityLoginActivity,\n getSessions: getSecuritySessions,\n revokeSession: revokeSecuritySession,\n revokeOtherSessions: revokeOtherSecuritySessions\n },\n loginBootstrap: getLoginBootstrap,\n sso: {\n getDetails: getSsoDetails,\n generateUrl: generateSsoUrl,\n callback: ssoCallback\n },\n session: {\n getRefreshToken,\n refreshSession,\n refreshAccessToken: getAuthRefreshToken,\n getAccessToken,\n setAccessToken: persistAccessToken,\n clearAccessToken,\n isAuthenticated,\n isAuthenticateApp,\n isAccessTokenExpired,\n isExpiresAccessToken,\n isCookieExpired,\n hasRefreshSession,\n hasValidAccessToken,\n didLastRefreshFail,\n isSessionRefreshExhausted,\n isRefreshInFlight,\n resetSessionAuthState,\n clearSessionRefreshExhaustedState,\n hydrateSessionRefreshState,\n contract: (): SessionContractInput => ({\n hasAccessToken: () => Boolean(getAccessToken()),\n isAccessTokenExpired: isAccessTokenExpired,\n hasRefreshSession\n }),\n isFullyAuthenticated: () =>\n isFullyAuthenticatedContract({\n hasAccessToken: () => Boolean(getAccessToken()),\n isAccessTokenExpired: isAccessTokenExpired,\n hasRefreshSession\n }),\n hasAuthenticatedAccess: () =>\n hasAuthenticatedAccessContract({\n hasAccessToken: () => Boolean(getAccessToken()),\n isAccessTokenExpired: isAccessTokenExpired,\n hasRefreshSession\n }),\n hasValidAccess: () =>\n hasValidAccess({\n hasAccessToken: () => Boolean(getAccessToken()),\n isAccessTokenExpired: isAccessTokenExpired,\n hasRefreshSession\n })\n }\n}\n","export type MfaBootRecoveryResult = 'pending' | 'orphan_cleared' | 'stale_token_cleared' | 'none'\n\nexport type MfaBootRecoveryInput = {\n hasMfaContext: () => boolean\n hasAccessToken: () => boolean\n hasRefreshToken: () => boolean\n clearMfaOrphan: () => void\n clearStaleAccessToken: () => void\n /** Restore temp MFA JWT from sessionStorage after refresh. Return true when hydrated. */\n tryHydrateMfaAccessToken?: () => boolean | Promise<boolean>\n}\n\n/**\n * Normalize MFA gate state on cold load before the router mounts.\n * When sessionStorage holds a valid temp MFA JWT, hydrates in-memory access token so MFA can resume.\n */\nexport async function recoverMfaGateOnBoot(input: MfaBootRecoveryInput): Promise<MfaBootRecoveryResult> {\n const hasContext = input.hasMfaContext()\n let hasToken = input.hasAccessToken()\n const hasRefresh = input.hasRefreshToken()\n\n if (hasContext && hasToken) {\n return 'pending'\n }\n\n if (hasContext && !hasToken) {\n const hydrated = await input.tryHydrateMfaAccessToken?.()\n hasToken = input.hasAccessToken()\n if (hydrated && hasToken) {\n return 'pending'\n }\n input.clearMfaOrphan()\n return 'orphan_cleared'\n }\n\n if (hasToken && !hasContext && !hasRefresh) {\n input.clearStaleAccessToken()\n return 'stale_token_cleared'\n }\n\n return 'none'\n}\n\nexport type { VisibilityRefreshOptions } from '../http/visibility-refresh-scheduler.js'\nexport { startVisibilityRefreshScheduler, stopVisibilityRefreshScheduler } from '../http/visibility-refresh-scheduler.js'\n","import { hasValidAccess, isFullyAuthenticated, isMfaPendingSession, type SessionContractInput } from './session-contract.js'\n\nexport type AuthRouteAction =\n | { kind: 'allow' }\n | { kind: 'show_loader' }\n | { kind: 'redirect_login'; returnUrl?: string }\n | { kind: 'redirect_mfa' }\n | { kind: 'redirect_funnel'; step: 'email_verify' | 'hub_select' | 'portal_select' }\n\nexport type AuthFunnelState = {\n emailVerified?: boolean\n hubId?: number | string | null\n portalId?: number | string | null\n}\n\nexport type ResolveAuthRouteActionInput = {\n pathname: string\n isPublicAuthRoute: (pathname: string) => boolean\n session: SessionContractInput\n funnel?: AuthFunnelState\n mfaRoute: string\n previewMode?: boolean\n /** When refresh hint exists but access token missing — session restoring. */\n sessionRestoring?: boolean\n /** Refresh already failed — do not show restoring loader; redirect to login. */\n sessionRefreshExhausted?: boolean\n}\n\nexport function resolveAuthRouteAction(input: ResolveAuthRouteActionInput): AuthRouteAction {\n const {\n pathname,\n isPublicAuthRoute,\n session,\n funnel,\n mfaRoute,\n previewMode = false,\n sessionRestoring = false,\n sessionRefreshExhausted = false\n } = input\n\n if (previewMode) {\n return { kind: 'allow' }\n }\n\n if (isMfaPendingSession(session)) {\n if (pathname === mfaRoute) {\n return { kind: 'allow' }\n }\n return { kind: 'redirect_mfa' }\n }\n\n if (sessionRestoring && !sessionRefreshExhausted) {\n return { kind: 'show_loader' }\n }\n\n if (sessionRefreshExhausted && !hasValidAccess(session)) {\n if (isPublicAuthRoute(pathname)) {\n return { kind: 'allow' }\n }\n return { kind: 'redirect_login' }\n }\n\n const authenticated = isFullyAuthenticated(session)\n\n if (!authenticated) {\n if (isPublicAuthRoute(pathname)) {\n return { kind: 'allow' }\n }\n return { kind: 'redirect_login' }\n }\n\n if (funnel) {\n if (funnel.emailVerified === false) {\n return { kind: 'redirect_funnel', step: 'email_verify' }\n }\n if (!funnel.hubId) {\n return { kind: 'redirect_funnel', step: 'hub_select' }\n }\n if (!funnel.portalId) {\n return { kind: 'redirect_funnel', step: 'portal_select' }\n }\n }\n\n return { kind: 'allow' }\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/main/core/utils/constants.ts","../src/main/core/utils/localStorage.ts","../src/main/core/utils/runtime-hub-context.ts","../src/main/core/utils/hub-context.ts","../src/main/core/http/iframe-session-storage.ts","../src/main/core/utils/error-log-sanitize.ts","../src/main/core/logging/logger.ts","../src/main/core/http/token-store.ts","../src/main/core/http/auth-utils.ts"],"names":["config","getRefreshToken"],"mappings":"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","file":"chunk-KYZRYIB3.js","sourcesContent":["import { WP_STORAGE_KEYS } from './wp-storage-keys'\n\n// cookies (canonical wp.c.* names)\nexport const LOGIN_DETAILS = WP_STORAGE_KEYS.c.auth.login\nexport const REFRESH_TOKEN = WP_STORAGE_KEYS.c.auth.refresh\nexport const PORTAL = WP_STORAGE_KEYS.c.auth.portal\nexport const SUBSCRIPTION_TYPE = WP_STORAGE_KEYS.c.auth.sub\n\n// hub context fields inside wp.c.hub JSON blob\nexport const HUBSPOT_DATA = WP_STORAGE_KEYS.c.hub\nexport const HUB_ID = 'hubId'\nexport const DEV_PORTAL_ID = 'devPortalId'\nexport const PORTAL_ID = 'portalId'\nexport const DEV_API_URL = 'devApiUrl'\n","type StringStore = {\n getItem(key: string): string | null\n setItem(key: string, value: string): void\n removeItem(key: string): void\n}\n\nconst memory = new Map<string, string>()\n\nconst memoryStore: StringStore = {\n getItem(key: string) {\n return memory.has(key) ? memory.get(key)! : null\n },\n setItem(key: string, value: string) {\n memory.set(key, value)\n },\n removeItem(key: string) {\n memory.delete(key)\n }\n}\n\nfunction resolveStore(): StringStore {\n if (typeof globalThis === 'undefined') {\n return memoryStore\n }\n const ls = (globalThis as unknown as { localStorage?: StringStore }).localStorage\n if (!ls || typeof ls.getItem !== 'function') {\n return memoryStore\n }\n try {\n const probeKey = '__woodsportal_client_sdk_ls_probe__'\n ls.setItem(probeKey, '1')\n ls.removeItem(probeKey)\n return ls\n } catch {\n return memoryStore\n }\n}\n\nexport const storage = {\n set: (key: string, value: unknown) => {\n resolveStore().setItem(key, JSON.stringify(value))\n },\n\n get: <T>(key: string): T | null => {\n const item = resolveStore().getItem(key)\n return item ? (JSON.parse(item) as T) : null\n },\n\n remove: (key: string) => {\n resolveStore().removeItem(key)\n }\n}\n","/** Initialized HTTP client hub context — fallback when storage is empty (avoids import cycles). */\nlet initializedHubId = ''\nlet initializedDevPortalId = ''\nlet initializedDevApiUrl = ''\n\nexport function setRuntimeHttpClientHubContext(partial: { hubId?: string; devPortalId?: string; devApiUrl?: string }): void {\n if (partial.hubId != null) {\n initializedHubId = partial.hubId\n }\n if (partial.devPortalId != null) {\n initializedDevPortalId = partial.devPortalId\n }\n if (partial.devApiUrl != null) {\n initializedDevApiUrl = partial.devApiUrl\n }\n}\n\nexport function getRuntimeHttpClientHubId(): string {\n return initializedHubId\n}\n\nexport function getRuntimeHttpClientDevPortalId(): string {\n return initializedDevPortalId\n}\n\nexport function getRuntimeHttpClientDevApiUrl(): string {\n return initializedDevApiUrl\n}\n\n/** @internal Vitest only */\nexport function resetRuntimeHttpClientHubContextForTests(): void {\n initializedHubId = ''\n initializedDevPortalId = ''\n initializedDevApiUrl = ''\n}\n","import { Config, HubspotStorage } from '../types'\nimport { HUBSPOT_DATA, HUB_ID, DEV_PORTAL_ID, PORTAL_ID, DEV_API_URL } from './constants'\nimport { storage } from './localStorage'\nimport { getRuntimeHttpClientDevApiUrl, getRuntimeHttpClientDevPortalId, getRuntimeHttpClientHubId } from './runtime-hub-context'\n\nfunction readStorageField(key: string): string {\n const hubSpotData = storage.get<Record<string, string>>(HUBSPOT_DATA)\n const value = hubSpotData?.[key]\n return value != null && String(value).trim() !== '' ? String(value) : ''\n}\n\nexport const config = {\n get hubId() {\n return readStorageField(HUB_ID) || getRuntimeHttpClientHubId()\n },\n get devPortalId() {\n return readStorageField(DEV_PORTAL_ID) || getRuntimeHttpClientDevPortalId()\n },\n get portalId() {\n return readStorageField(PORTAL_ID)\n },\n get devApiUrl() {\n return readStorageField(DEV_API_URL) || getRuntimeHttpClientDevApiUrl()\n }\n} satisfies Config\n\nexport const setConfig = {\n setDevPortalId(portalId: string) {\n const existing = storage.get<HubspotStorage>(HUBSPOT_DATA) || {}\n\n storage.set(HUBSPOT_DATA, {\n ...existing,\n [PORTAL_ID]: portalId\n })\n }\n}\n","/**\n * Iframe-safe refresh token persistence (HubSpot CMS editor third-party cookie fallback).\n */\n\nimport { wpClientIframeRefreshExpKey, wpClientIframeRefreshKey, WP_STORAGE_KEYS } from '../utils/wp-storage-keys'\nimport { config } from '../utils/hub-context'\n\nlet iframeStorageMode = false\n\nexport function setIframeStorageMode(enabled: boolean): void {\n iframeStorageMode = enabled\n}\n\nexport function isIframeStorageMode(): boolean {\n return iframeStorageMode\n}\n\nfunction resolveHubId(): string | number {\n const fromWindow =\n typeof window !== 'undefined' ? (window as Window & { hubSpotData?: { hubId?: string | number } }).hubSpotData?.hubId : undefined\n const fromConfig = config.hubId\n return fromWindow ?? fromConfig ?? 'default'\n}\n\nfunction iframeKey(): string {\n return wpClientIframeRefreshKey(resolveHubId())\n}\n\nfunction iframeExpKey(): string {\n return wpClientIframeRefreshExpKey(resolveHubId())\n}\n\nexport function readIframeRefreshToken(): string | null {\n if (typeof window === 'undefined' || !window.localStorage) {\n return null\n }\n try {\n const raw = window.localStorage.getItem(iframeKey())\n return raw ? (JSON.parse(raw) as string) : null\n } catch {\n return null\n }\n}\n\nexport function writeIframeRefreshToken(token: string, expiresAtMs?: number): void {\n if (typeof window === 'undefined' || !window.localStorage) {\n return\n }\n try {\n window.localStorage.setItem(iframeKey(), JSON.stringify(token))\n if (expiresAtMs != null) {\n window.localStorage.setItem(iframeExpKey(), String(expiresAtMs))\n }\n } catch {\n // private mode / blocked storage\n }\n}\n\nexport function clearIframeRefreshToken(): void {\n if (typeof window === 'undefined' || !window.localStorage) {\n return\n }\n try {\n window.localStorage.removeItem(iframeKey())\n window.localStorage.removeItem(iframeExpKey())\n } catch {\n // ignore\n }\n}\n\nexport function iframeRefreshTokenExpired(): boolean {\n if (typeof window === 'undefined' || !window.localStorage) {\n return true\n }\n try {\n const expRaw = window.localStorage.getItem(iframeExpKey())\n if (!expRaw) {\n return false\n }\n const exp = Number(expRaw)\n return Number.isFinite(exp) && Date.now() > exp\n } catch {\n return true\n }\n}\n\nexport function listIframeRefreshKeyPrefixes(): string[] {\n return ['wp_iframe_rt_', WP_STORAGE_KEYS.c.auth.iframeRtPrefix]\n}\n","const SENSITIVE_FIELD_NAMES = new Set(['token', 'refreshtoken', 'accesstoken', 'password', 'secret', 'authorization', 'otp', 'code'])\n\nfunction isSensitiveField(name: string): boolean {\n const normalized = name.toLowerCase()\n return SENSITIVE_FIELD_NAMES.has(normalized) || normalized.includes('password')\n}\n\nfunction redactValue(value: unknown): unknown {\n if (value == null || typeof value !== 'object') {\n return value\n }\n if (Array.isArray(value)) {\n return value.map(redactValue)\n }\n\n const input = value as Record<string, unknown>\n const output: Record<string, unknown> = {}\n for (const [key, nested] of Object.entries(input)) {\n output[key] = isSensitiveField(key) ? '[redacted]' : redactValue(nested)\n }\n return output\n}\n\n/** Prefer structured API error fields; fall back to redacted payload. */\nexport function sanitizeAxiosErrorData(data: unknown): unknown {\n if (data == null || typeof data !== 'object') {\n return data\n }\n\n const payload = data as Record<string, unknown>\n const safeFields = ['errorCode', 'message', 'errorMessage', 'detailedMessage', 'correlationId', 'category', 'statusCode'] as const\n\n const summary: Record<string, unknown> = {}\n for (const field of safeFields) {\n if (field in payload) {\n summary[field] = payload[field]\n }\n }\n\n if (Object.keys(summary).length > 0) {\n return summary\n }\n\n return redactValue(payload)\n}\n\n/** Redact sensitive keys from arbitrary log metadata. */\nexport function redactLogMeta(meta: Record<string, unknown> | undefined): Record<string, unknown> | undefined {\n if (meta == null) {\n return meta\n }\n return redactValue(meta) as Record<string, unknown>\n}\n","import axios from 'axios'\nimport { sanitizeAxiosErrorData, redactLogMeta } from '../utils/error-log-sanitize'\nimport type { LogLevel, LogMeta, LoggerConfig, SdkLogger } from './logger-types'\n\nconst LEVEL_RANK: Record<LogLevel, number> = {\n debug: 0,\n info: 1,\n warn: 2,\n error: 3,\n silent: 4\n}\n\nconst DEFAULT_CONFIG = {\n level: 'info' as LogLevel,\n namespace: 'woodsportal-sdk',\n enabled: true,\n httpTracing: true\n}\n\nlet runtimeConfig = { ...DEFAULT_CONFIG }\nlet customSinks: LoggerConfig['sinks']\n\nfunction shouldEmit(level: LogLevel): boolean {\n if (!runtimeConfig.enabled || runtimeConfig.level === 'silent') {\n return false\n }\n return LEVEL_RANK[level] >= LEVEL_RANK[runtimeConfig.level]\n}\n\nfunction formatPrefix(context: string): string {\n return `[${runtimeConfig.namespace}] ${context}`\n}\n\nfunction defaultDebug(context: string, message: string, meta?: LogMeta): void {\n if (meta != null) {\n console.debug(formatPrefix(context), message, meta)\n return\n }\n console.debug(formatPrefix(context), message)\n}\n\nfunction defaultInfo(context: string, message: string, meta?: LogMeta): void {\n if (meta != null) {\n console.info(formatPrefix(context), message, meta)\n return\n }\n console.info(formatPrefix(context), message)\n}\n\nfunction defaultWarn(context: string, message: string, meta?: LogMeta): void {\n if (meta != null) {\n console.warn(formatPrefix(context), message, meta)\n return\n }\n console.warn(formatPrefix(context), message)\n}\n\nfunction defaultError(context: string, error: unknown, meta?: LogMeta): void {\n if (axios.isAxiosError(error)) {\n const payload = {\n message: error.message,\n status: error.response?.status,\n statusText: error.response?.statusText,\n data: sanitizeAxiosErrorData(error.response?.data),\n url: error.config?.url,\n method: error.config?.method,\n ...redactLogMeta(meta)\n }\n console.error(formatPrefix(context), payload)\n return\n }\n\n if (error instanceof Error) {\n if (meta != null) {\n console.error(formatPrefix(context), error.message, error, redactLogMeta(meta))\n return\n }\n console.error(formatPrefix(context), error.message, error)\n return\n }\n\n if (meta != null) {\n console.error(formatPrefix(context), error, redactLogMeta(meta))\n return\n }\n console.error(formatPrefix(context), error)\n}\n\nexport function configureLogger(config: LoggerConfig = {}): void {\n runtimeConfig = {\n level: config.level ?? DEFAULT_CONFIG.level,\n namespace: config.namespace ?? DEFAULT_CONFIG.namespace,\n enabled: config.enabled ?? DEFAULT_CONFIG.enabled,\n httpTracing: config.httpTracing ?? DEFAULT_CONFIG.httpTracing\n }\n customSinks = config.sinks\n}\n\n/** Test helper — restore defaults between test files. */\nexport function resetLoggerForTests(): void {\n runtimeConfig = { ...DEFAULT_CONFIG }\n customSinks = undefined\n}\n\nexport function isHttpTracingEnabled(): boolean {\n return runtimeConfig.enabled && runtimeConfig.httpTracing && shouldEmit('debug')\n}\n\nexport function getLoggerLevel(): LogLevel {\n return runtimeConfig.level\n}\n\nexport const logger: SdkLogger = {\n debug(context, message, meta) {\n if (!shouldEmit('debug')) return\n const sink = customSinks?.debug ?? defaultDebug\n sink(context, message, redactLogMeta(meta))\n },\n info(context, message, meta) {\n if (!shouldEmit('info')) return\n const sink = customSinks?.info ?? defaultInfo\n sink(context, message, redactLogMeta(meta))\n },\n warn(context, message, meta) {\n if (!shouldEmit('warn')) return\n const sink = customSinks?.warn ?? defaultWarn\n sink(context, message, redactLogMeta(meta))\n },\n error(context, error, meta) {\n if (!shouldEmit('error')) return\n const sink = customSinks?.error ?? defaultError\n sink(context, error, redactLogMeta(meta))\n }\n}\n\nexport type { LogLevel, LogMeta, LoggerConfig, SdkLogger } from './logger-types'\n","/**\n\n * Token storage utilities\n\n * These functions handle access token management\n\n */\n\nimport { getCookie, isCookieExpired, isCorruptCookieRawValue } from '../utils/cookie.js'\n\nimport { getStorageKeys } from '../utils/storage-keys'\nimport { WP_STORAGE_KEYS } from '../utils/wp-storage-keys.js'\nimport { isIframeStorageMode, readIframeRefreshToken } from './iframe-session-storage.js'\nimport { logger } from '../logging/logger.js'\n\nlet accessToken: string | null = null\n\nlet tokenExpiresAt: number | null = null\n\nlet accessTtlMs: number | null = null\n\nlet refreshCallback: ((refreshToken: string) => Promise<{ token: string | null; success: boolean }>) | null = null\n\nlet refreshBufferSeconds = 60\n\nlet refreshPromise: Promise<void> | null = null\n\nlet lastRefreshFailed = false\n\nlet lastSuccessfulRefreshAt: number | null = null\n\nlet sessionLifecycleListener: (() => void) | null = null\n\nconst MIN_SHORT_TTL_BUFFER_MS = 5_000\n\nconst MIN_PROACTIVE_REFRESH_INTERVAL_MS = 30_000\n\n/** Exported for unit tests. */\n\nexport function getEffectiveBufferMs(ttlMs: number): number {\n const capMs = refreshBufferSeconds * 1000\n\n let buffer: number\n if (ttlMs <= capMs) {\n buffer = Math.max(MIN_SHORT_TTL_BUFFER_MS, Math.floor(ttlMs * 0.2))\n } else {\n buffer = capMs\n }\n\n // Buffer must stay inside the token lifetime — otherwise every request looks \"expired\".\n const maxBuffer = Math.max(0, ttlMs - 1_000)\n return Math.min(buffer, maxBuffer)\n}\n\nfunction getCurrentBufferMs(): number {\n if (accessTtlMs != null && accessTtlMs > 0) {\n return getEffectiveBufferMs(accessTtlMs)\n }\n\n return refreshBufferSeconds * 1000\n}\n\nexport function getAccessToken(): string | null {\n return accessToken\n}\n\nexport function setSessionLifecycleListener(listener: (() => void) | null): void {\n sessionLifecycleListener = listener\n}\n\nfunction notifySessionLifecycleChange(): void {\n try {\n sessionLifecycleListener?.()\n } catch {\n // ignore listener errors\n }\n}\n\nfunction persistRefreshExhausted(): void {\n if (typeof window === 'undefined' || !window.sessionStorage) {\n return\n }\n try {\n window.sessionStorage.setItem(WP_STORAGE_KEYS.c.auth.refreshExhausted, JSON.stringify({ ts: Date.now() }))\n } catch {\n // ignore quota / private mode\n }\n}\n\nfunction clearPersistedRefreshExhausted(): void {\n if (typeof window === 'undefined' || !window.sessionStorage) {\n return\n }\n try {\n window.sessionStorage.removeItem(WP_STORAGE_KEYS.c.auth.refreshExhausted)\n } catch {\n // ignore\n }\n}\n\nfunction readPersistedRefreshExhausted(): boolean {\n if (typeof window === 'undefined' || !window.sessionStorage) {\n return false\n }\n try {\n return Boolean(window.sessionStorage.getItem(WP_STORAGE_KEYS.c.auth.refreshExhausted))\n } catch {\n return false\n }\n}\n\n/** Restore in-memory refresh-failure state after a full page reload (same tab). */\nexport function hydrateSessionRefreshState(): void {\n if (readPersistedRefreshExhausted()) {\n lastRefreshFailed = true\n }\n}\n\nexport function clearSessionRefreshExhaustedState(): void {\n lastRefreshFailed = false\n clearPersistedRefreshExhausted()\n}\n\nfunction markRefreshFailed(): void {\n lastRefreshFailed = true\n persistRefreshExhausted()\n clearAccessToken()\n notifySessionLifecycleChange()\n}\n\nexport function storAccessToken(token: string, expiresIn?: number): void {\n accessToken = token\n\n clearSessionRefreshExhaustedState()\n\n if (expiresIn != null && expiresIn > 0) {\n accessTtlMs = expiresIn * 1000\n\n tokenExpiresAt = Date.now() + accessTtlMs\n } else {\n accessTtlMs = null\n\n tokenExpiresAt = null\n }\n\n notifySessionLifecycleChange()\n}\n\nexport function clearAccessToken(): void {\n accessToken = null\n\n tokenExpiresAt = null\n\n accessTtlMs = null\n\n lastSuccessfulRefreshAt = null\n}\n\n/** Clears proactive refresh throttle only — refresh exhaustion survives until login or T3 sessionStorage clear. */\nexport function resetSessionAuthState(): void {\n lastSuccessfulRefreshAt = null\n}\n\nexport function setRefreshBufferSeconds(seconds: number): void {\n refreshBufferSeconds = Math.max(0, seconds)\n}\n\nexport function getRefreshBufferSeconds(): number {\n return refreshBufferSeconds\n}\n\nexport function didLastRefreshFail(): boolean {\n return lastRefreshFailed\n}\n\n/** Alias for route guards — refresh was attempted and failed with no new access JWT. */\nexport function isSessionRefreshExhausted(): boolean {\n if (lastRefreshFailed) {\n return true\n }\n if (readPersistedRefreshExhausted()) {\n lastRefreshFailed = true\n return true\n }\n return false\n}\n\nexport function isExpiresAccessToken(): boolean {\n if (!accessToken) return true\n\n if (tokenExpiresAt === null) return false\n\n const bufferMs = getCurrentBufferMs()\n\n return Date.now() >= tokenExpiresAt - bufferMs\n}\n\n/**\n\n * Set the refresh callback function\n\n * This is called by the HTTP client during initialization\n\n */\n\nexport function setRefreshCallback(callback: (refreshToken: string) => Promise<{ token: string | null; success: boolean }>): void {\n refreshCallback = callback\n}\n\nexport function isRefreshInFlight(): boolean {\n return refreshPromise != null\n}\n\nexport type RefreshSessionOptions = {\n /** Bypass min proactive refresh interval (e.g. 401 retry, cold bootstrap). */\n\n force?: boolean\n}\n\n/** Single deduped refresh entry point for bootstrap, HTTP client, and visibility handlers. */\n\nexport async function refreshSession(options: RefreshSessionOptions = {}): Promise<void> {\n const { force = false } = options\n\n if (!force && lastSuccessfulRefreshAt != null && Date.now() - lastSuccessfulRefreshAt < MIN_PROACTIVE_REFRESH_INTERVAL_MS) {\n return\n }\n\n if (!refreshCallback) {\n return\n }\n\n if (!refreshPromise) {\n refreshPromise = (async () => {\n const { withRefreshLock } = await import('./refresh-lock.js')\n await withRefreshLock(async () => {\n const { getRefreshToken } = await import('./auth-utils.js')\n const refreshToken = getRefreshToken()\n\n if (!refreshToken) {\n markRefreshFailed()\n\n const storageKey = getStorageKeys().refreshToken\n const hasCookieKey =\n typeof document !== 'undefined' &&\n typeof storageKey === 'string' &&\n storageKey.length > 0 &&\n document.cookie.includes(`${storageKey}=`)\n\n logger.warn('auth', 'refresh session aborted: missing refresh token', {\n operation: 'refreshSession',\n storageKey,\n hasCookieKey,\n iframeStorageMode: isIframeStorageMode()\n })\n\n throw new Error('Session expired: missing refresh token')\n }\n\n const result = await refreshCallback!(refreshToken)\n\n if (!result.success || !result.token) {\n markRefreshFailed()\n\n throw new Error('Session refresh failed')\n }\n\n lastRefreshFailed = false\n\n lastSuccessfulRefreshAt = Date.now()\n })\n })().finally(() => {\n refreshPromise = null\n })\n }\n\n await refreshPromise\n}\n\n/**\n\n * Ensures the access token is valid, refreshing if necessary.\n\n * Throws when refresh is required but fails (avoids bearer-less 401 loops).\n\n */\n\nexport async function ensureValidRefresh(): Promise<void> {\n if (!isExpiresAccessToken()) {\n return\n }\n\n // Pre-request refresh must not be throttled by the proactive min interval.\n await refreshSession({ force: true })\n}\n\nexport function isAuthenticateApp() {\n const token = getAccessToken()\n\n if (token) {\n const bufferMs = getCurrentBufferMs()\n\n if (tokenExpiresAt === null || Date.now() < tokenExpiresAt - bufferMs) {\n return true\n }\n }\n\n if (!isCookieExpired(getStorageKeys().refreshToken)) {\n if (lastRefreshFailed && !token) {\n return false\n }\n return true\n }\n\n return false\n}\n\n/** Preferred 3.0 name for {@link isAuthenticateApp}. */\n\nexport function isAuthenticated() {\n return isAuthenticateApp()\n}\n\n/** Preferred 3.0 name for {@link isExpiresAccessToken}. */\n\nexport function isAccessTokenExpired() {\n return isExpiresAccessToken()\n}\n\nexport function hasRefreshSession(): boolean {\n if (isSessionRefreshExhausted() && !accessToken) {\n return false\n }\n const refreshKey = getStorageKeys().refreshToken\n if (!refreshKey || isCookieExpired(refreshKey)) {\n return false\n }\n if (!readRefreshTokenValue()) {\n return false\n }\n if (lastRefreshFailed && !accessToken) {\n return false\n }\n return true\n}\n\nfunction readRefreshTokenValue(): string | null {\n const key = getStorageKeys().refreshToken\n const raw = getCookie(key)\n if (!isCorruptCookieRawValue(raw)) {\n return raw\n }\n if (isIframeStorageMode()) {\n return readIframeRefreshToken()\n }\n return null\n}\n\nexport function hasValidAccessToken(): boolean {\n return Boolean(getAccessToken()) && !isExpiresAccessToken()\n}\n","/**\n\n * Authentication utility functions\n\n * These handle refresh token management\n\n */\n\nimport { setCookie, parseCookieJson, stringifyCookieValue, getCookie, isCorruptCookieRawValue } from '../utils/cookie'\n\nimport { getStorageKeys } from '../utils/storage-keys'\n\nimport { storAccessToken } from './token-store'\n\nimport { isIframeStorageMode, readIframeRefreshToken, writeIframeRefreshToken } from './iframe-session-storage'\n\nfunction writeJsonCookie(key: string | undefined, data: unknown, expire?: number | Date): void {\n if (!key) {\n return\n }\n\n const serialized = stringifyCookieValue(data)\n\n if (serialized == null) {\n return\n }\n\n setCookie(key, serialized, expire)\n}\n\n// Set data\n\nexport const setLoggedInDetails = async (data: any) => {\n return new Promise((resolve: any) => {\n const keys = getStorageKeys()\n\n writeJsonCookie(keys.loginDetails, data)\n\n if (keys.authUser !== keys.loginDetails) {\n writeJsonCookie(keys.authUser, data)\n }\n\n resolve()\n })\n}\n\nexport const setProfileDetails = async (data: any) => {\n return new Promise((resolve: any) => {\n writeJsonCookie(getStorageKeys().loginDetails, data)\n\n resolve()\n })\n}\n\nexport function setRefreshToken(token: string, expiresAt: number) {\n return new Promise((resolve: any) => {\n if (!token || typeof token !== 'string') {\n resolve()\n\n return\n }\n\n let expiresMs: number\n\n if (typeof expiresAt === 'number' && expiresAt > 1_000_000_000_000) {\n expiresMs = expiresAt\n } else if (typeof expiresAt === 'number' && expiresAt > 1_000_000_000) {\n expiresMs = expiresAt * 1000\n } else {\n expiresMs = Date.now() + (expiresAt || 0) * 1000\n }\n\n const serialized = stringifyCookieValue(token)\n\n if (serialized != null) {\n setCookie(getStorageKeys().refreshToken, serialized, new Date(expiresMs))\n }\n\n if (isIframeStorageMode()) {\n writeIframeRefreshToken(token, expiresMs)\n }\n\n resolve()\n })\n}\n\nexport function setAccessToken(token: string, expiresIn?: number) {\n return new Promise((resolve: any) => {\n storAccessToken(token, expiresIn)\n\n resolve()\n })\n}\n\nexport const setPortal = async (data: any) => {\n return new Promise((resolve: any) => {\n writeJsonCookie(getStorageKeys().portal, data ?? {})\n\n resolve()\n })\n}\n\nexport const setSubscriptionType = async (data: any) => {\n return new Promise((resolve: any) => {\n writeJsonCookie(getStorageKeys().subscriptionType, data ?? 'BASIC')\n\n resolve()\n })\n}\n\n// Get data\n\nexport function getProfile(): string | null {\n return parseCookieJson(getStorageKeys().loginDetails)\n}\n\nexport function getRefreshToken(): string | null {\n const raw = getCookie(getStorageKeys().refreshToken)\n\n if (!isCorruptCookieRawValue(raw)) {\n return raw\n }\n\n if (isIframeStorageMode()) {\n return readIframeRefreshToken()\n }\n\n return null\n}\n\nexport function getPortal(): any | null {\n return parseCookieJson(getStorageKeys().portal)\n}\n\nexport function getSubscriptionType(): string | null {\n return parseCookieJson<string>(getStorageKeys().subscriptionType)\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/main/core/utils/storage-keys.ts","../src/main/core/utils/cookie.ts","../src/main/core/utils/storage-migration.ts"],"names":["Cookies"],"mappings":"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","file":"chunk-XANZNL46.js","sourcesContent":["import { WP_STORAGE_KEYS } from './wp-storage-keys'\n\nexport interface StorageKeyConfig {\n loginDetails?: string\n refreshToken?: string\n portal?: string\n subscriptionType?: string\n authUser?: string\n pagination?: string\n routeMenu?: string\n associationView?: string\n emailVerified?: string\n}\n\nconst defaults: Required<StorageKeyConfig> = {\n loginDetails: WP_STORAGE_KEYS.c.auth.login,\n refreshToken: WP_STORAGE_KEYS.c.auth.refresh,\n portal: WP_STORAGE_KEYS.c.auth.portal,\n subscriptionType: WP_STORAGE_KEYS.c.auth.sub,\n authUser: WP_STORAGE_KEYS.c.auth.login,\n pagination: WP_STORAGE_KEYS.c.ui.pag,\n routeMenu: WP_STORAGE_KEYS.c.ui.menu,\n associationView: WP_STORAGE_KEYS.c.ui.assoc,\n emailVerified: WP_STORAGE_KEYS.c.auth.emailOk\n}\n\nlet runtimeKeys: Required<StorageKeyConfig> = { ...defaults }\n\nexport function configureStorageKeys(overrides: StorageKeyConfig = {}): void {\n runtimeKeys = { ...defaults, ...runtimeKeys, ...overrides }\n if (overrides.authUser === undefined) {\n runtimeKeys.authUser = runtimeKeys.loginDetails\n }\n}\n\n/** Test helper — restore default cookie key names. */\nexport function resetStorageKeysForTests(): void {\n runtimeKeys = { ...defaults }\n}\n\nexport function getStorageKeys(): Readonly<Required<StorageKeyConfig>> {\n return runtimeKeys\n}\n\nexport { WP_STORAGE_KEYS } from './wp-storage-keys'\n","import Cookies from 'js-cookie'\nimport { getClientAuthCookieNamesToClear } from './storage-migration'\n\nfunction cookieSecureFlag(): boolean {\n if (typeof window === 'undefined') return true\n return window.location.protocol === 'https:'\n}\n\n/** Values that must never be persisted in readable cookies. */\nexport function isCorruptCookieRawValue(raw: string | null | undefined): boolean {\n return raw == null || raw === '' || raw === 'undefined' || raw === 'null'\n}\n\n/** Serialize a value for cookie storage; returns null when write should be skipped. */\nexport function stringifyCookieValue(value: unknown): string | null {\n if (value === undefined || value === null) {\n return null\n }\n if (typeof value === 'string') {\n return isCorruptCookieRawValue(value) ? null : value\n }\n const serialized = JSON.stringify(value)\n if (serialized === undefined || isCorruptCookieRawValue(serialized)) {\n return null\n }\n return serialized\n}\n\nexport const setCookie = (key: string, value: string, expire?: number | Date) => {\n if (!key || isCorruptCookieRawValue(value)) {\n return undefined\n }\n return Cookies.set(key, value, {\n expires: expire,\n sameSite: cookieSecureFlag() ? 'none' : 'lax',\n secure: cookieSecureFlag()\n })\n}\n\nexport const getCookie: any = (key: any) => {\n return Cookies.get(key)\n}\n\n/** Parse JSON stored in a cookie; removes corrupt values on read (self-heal). */\nexport function parseCookieJson<T = unknown>(key: string | null | undefined): T | null {\n if (key == null || key === '') {\n return null\n }\n const raw = getCookie(key)\n if (isCorruptCookieRawValue(raw)) {\n if (raw === 'undefined' || raw === 'null') {\n Cookies.remove(key)\n }\n return null\n }\n try {\n return JSON.parse(raw) as T\n } catch {\n Cookies.remove(key)\n return null\n }\n}\n\nexport const removeCookie = (key: any) => {\n return Cookies.remove(key)\n}\n\n/** Clears client-portal session cookies only (does not wipe admin cookies on shared localhost). */\nexport const clearClientAuthCookies = () => {\n getClientAuthCookieNamesToClear().forEach((name) => Cookies.remove(name))\n for (const legacyAccess of ['woodsportal_access_token', 'AUTH_CRED']) {\n Cookies.remove(legacyAccess)\n }\n}\n\n/** @deprecated Prefer {@link clearClientAuthCookies} */\nexport const removeAllCookie = clearClientAuthCookies\n\nexport const isCookieExpired = (key: string): boolean => {\n const value = Cookies.get(key)\n if (value === undefined) {\n return true\n }\n try {\n const parsed = JSON.parse(value)\n if (parsed && typeof parsed === 'object' && 'expiresAt' in parsed) {\n const expiresAt = (parsed as { expiresAt?: number }).expiresAt\n return typeof expiresAt === 'number' && Date.now() > expiresAt\n }\n return false\n } catch {\n // Plain string values (e.g. refresh token) rely on browser cookie expiry.\n return false\n }\n}\n","import Cookies from 'js-cookie'\nimport {\n CLIENT_COOKIE_MIGRATIONS,\n CLIENT_SESSION_STORAGE_MIGRATIONS,\n LEGACY_CLIENT_AUTH_COOKIES,\n LEGACY_CLIENT_SESSION_EXACT,\n WP_STORAGE_KEYS,\n WP_UI_THEME,\n wpClientIframeRefreshKey,\n wpClientIframeRefreshExpKey\n} from './wp-storage-keys'\nimport { getStorageKeys } from './storage-keys'\nimport { isCorruptCookieRawValue } from './cookie'\n\nfunction migrateCookiePair(legacy: string, canonical: string): void {\n const value = Cookies.get(legacy)\n if (value === undefined) {\n return\n }\n if (isCorruptCookieRawValue(value)) {\n Cookies.remove(legacy)\n return\n }\n if (!Cookies.get(canonical)) {\n Cookies.set(canonical, value)\n }\n Cookies.remove(legacy)\n}\n\nfunction migrateLocalStoragePair(legacy: string, canonical: string): void {\n if (typeof window === 'undefined' || !window.localStorage) {\n return\n }\n try {\n const value = window.localStorage.getItem(legacy)\n if (value == null) {\n return\n }\n if (!window.localStorage.getItem(canonical)) {\n window.localStorage.setItem(canonical, value)\n }\n window.localStorage.removeItem(legacy)\n } catch {\n // private mode\n }\n}\n\nfunction migrateSessionStoragePair(legacy: string, canonical: string): void {\n if (typeof window === 'undefined' || !window.sessionStorage) {\n return\n }\n try {\n const value = window.sessionStorage.getItem(legacy)\n if (value == null) {\n return\n }\n if (!window.sessionStorage.getItem(canonical)) {\n window.sessionStorage.setItem(canonical, value)\n }\n window.sessionStorage.removeItem(legacy)\n } catch {\n // ignore\n }\n}\n\nfunction migrateIframeRefreshKeys(): void {\n if (typeof window === 'undefined' || !window.localStorage) {\n return\n }\n try {\n const keys = Object.keys(window.localStorage).filter((k) => k.startsWith('wp_iframe_rt_'))\n for (const legacyKey of keys) {\n const suffix = legacyKey.slice('wp_iframe_rt_'.length)\n if (suffix.endsWith('_exp')) {\n continue\n }\n const hubId = suffix\n const token = window.localStorage.getItem(legacyKey)\n const exp = window.localStorage.getItem(`${legacyKey}_exp`)\n const newKey = wpClientIframeRefreshKey(hubId)\n const newExpKey = wpClientIframeRefreshExpKey(hubId)\n if (token != null && !window.localStorage.getItem(newKey)) {\n window.localStorage.setItem(newKey, token)\n }\n if (exp != null && !window.localStorage.getItem(newExpKey)) {\n window.localStorage.setItem(newExpKey, exp)\n }\n window.localStorage.removeItem(legacyKey)\n window.localStorage.removeItem(`${legacyKey}_exp`)\n }\n } catch {\n // ignore\n }\n}\n\nfunction removeLegacyAccessTokenCookies(): void {\n const keys = getStorageKeys()\n const legacyAccess = ['woodsportal_access_token', 'AUTH_CRED']\n for (const name of legacyAccess) {\n Cookies.remove(name)\n }\n if (keys.authUser && keys.authUser !== keys.loginDetails) {\n // legacy duplicate profile mirror — uplift handled by migration; drop separate user cookie\n Cookies.remove(keys.authUser)\n }\n}\n\n/**\n * One-time uplift: read legacy browser keys, write canonical `wp.*` keys, delete legacy.\n * Safe to call on every boot (idempotent).\n */\nexport function migrateLegacyStorageKeys(): void {\n if (typeof window === 'undefined') {\n return\n }\n\n for (const [legacy, canonical] of CLIENT_COOKIE_MIGRATIONS) {\n migrateCookiePair(legacy, canonical)\n }\n\n migrateLocalStoragePair('hubSpotData', WP_STORAGE_KEYS.c.hub)\n migrateLocalStoragePair('theme', WP_UI_THEME)\n\n for (const [legacy, canonical] of CLIENT_SESSION_STORAGE_MIGRATIONS) {\n migrateSessionStoragePair(legacy, canonical)\n }\n\n migrateIframeRefreshKeys()\n removeLegacyAccessTokenCookies()\n\n // Drop dead forget-password key\n try {\n window.sessionStorage?.removeItem('entredEmail')\n } catch {\n // ignore\n }\n}\n\n/** All client auth cookie names to remove on logout (canonical + legacy + configured). */\nexport function getClientAuthCookieNamesToClear(): string[] {\n const keys = getStorageKeys()\n const configured = [\n keys.loginDetails,\n keys.refreshToken,\n keys.portal,\n keys.subscriptionType,\n keys.authUser,\n keys.pagination,\n keys.routeMenu,\n keys.associationView,\n keys.emailVerified\n ].filter((name): name is string => Boolean(name))\n\n const canonical = [\n WP_STORAGE_KEYS.c.auth.login,\n WP_STORAGE_KEYS.c.auth.refresh,\n WP_STORAGE_KEYS.c.auth.portal,\n WP_STORAGE_KEYS.c.auth.sub,\n WP_STORAGE_KEYS.c.auth.emailOk,\n WP_STORAGE_KEYS.c.ui.pag,\n WP_STORAGE_KEYS.c.ui.menu,\n WP_STORAGE_KEYS.c.ui.assoc\n ]\n\n return [...new Set([...configured, ...canonical, ...LEGACY_CLIENT_AUTH_COOKIES])]\n}\n\nexport function clearClientSessionStorageKeys(): void {\n if (typeof window === 'undefined' || !window.sessionStorage) {\n return\n }\n try {\n for (const [legacy, canonical] of CLIENT_SESSION_STORAGE_MIGRATIONS) {\n if (\n canonical === WP_STORAGE_KEYS.c.login.email ||\n canonical === WP_STORAGE_KEYS.c.login.force ||\n canonical === WP_STORAGE_KEYS.c.login.passkey ||\n canonical === WP_STORAGE_KEYS.c.login.done\n ) {\n continue\n }\n window.sessionStorage.removeItem(legacy)\n window.sessionStorage.removeItem(canonical)\n }\n for (const key of LEGACY_CLIENT_SESSION_EXACT) {\n if (key === 'entredEmail') {\n window.sessionStorage.removeItem(key)\n }\n }\n const preservedLoginKeys = new Set([\n WP_STORAGE_KEYS.c.login.email,\n WP_STORAGE_KEYS.c.login.force,\n WP_STORAGE_KEYS.c.login.passkey,\n WP_STORAGE_KEYS.c.login.done,\n 'woodsportal.login.email',\n 'woodsportal.login.forcePreLogin',\n 'woodsportal.login.passkeyPrimaryEnrolled',\n 'woodsportal.login.preLoginCompletedKey'\n ])\n const keysToRemove: string[] = []\n for (let i = 0; i < window.sessionStorage.length; i++) {\n const key = window.sessionStorage.key(i)\n if (!key || preservedLoginKeys.has(key)) continue\n if (key.startsWith('woodsportal.mfa.') || key.startsWith('wp.c.mfa.')) {\n keysToRemove.push(key)\n }\n if (key === WP_STORAGE_KEYS.c.auth.err || key === WP_STORAGE_KEYS.c.auth.refreshExhausted || key === 'authError') {\n keysToRemove.push(key)\n }\n if (key === WP_STORAGE_KEYS.c.sso.cb || key === 'sso_callback_processed') {\n keysToRemove.push(key)\n }\n }\n keysToRemove.forEach((k) => window.sessionStorage.removeItem(k))\n } catch {\n // ignore\n }\n}\n\nexport function clearClientIframeRefreshLocalKeys(): void {\n if (typeof window === 'undefined' || !window.localStorage) {\n return\n }\n try {\n const keys = Object.keys(window.localStorage).filter(\n (k) => k.startsWith('wp_iframe_rt_') || k.startsWith(WP_STORAGE_KEYS.c.auth.iframeRtPrefix)\n )\n keys.forEach((k) => window.localStorage.removeItem(k))\n } catch {\n // ignore\n }\n}\n\nexport function clearStaleIframeRefreshForOtherHubs(activeHubId: string | number | undefined): void {\n if (activeHubId == null || typeof window === 'undefined' || !window.localStorage) {\n return\n }\n const activePrefix = WP_STORAGE_KEYS.c.auth.iframeRtPrefix\n const activeKey = wpClientIframeRefreshKey(activeHubId)\n try {\n const keys = Object.keys(window.localStorage).filter(\n (k) => (k.startsWith('wp_iframe_rt_') || k.startsWith(activePrefix)) && k !== activeKey && k !== wpClientIframeRefreshExpKey(activeHubId)\n )\n keys.forEach((k) => window.localStorage.removeItem(k))\n } catch {\n // ignore\n }\n}\n"]}
@@ -1,9 +0,0 @@
1
- export { applyCrossTabSessionRevocation, installCrossTabSessionListener, resetCrossTabSessionSyncForTests, signalSessionChanged } from './chunk-CJZF3RTE.js';
2
- import './chunk-55MIERLJ.js';
3
- import './chunk-AL3JKMCX.js';
4
- import './chunk-2SZ2WQGG.js';
5
- import './chunk-KYZRYIB3.js';
6
- import './chunk-XANZNL46.js';
7
- import './chunk-7JHBCIR5.js';
8
- //# sourceMappingURL=cross-tab-session-NJCGCGJM.js.map
9
- //# sourceMappingURL=cross-tab-session-NJCGCGJM.js.map
@@ -1,4 +0,0 @@
1
- export { clearClientIframeRefreshLocalKeys, clearClientSessionStorageKeys, clearStaleIframeRefreshForOtherHubs, getClientAuthCookieNamesToClear, migrateLegacyStorageKeys } from './chunk-XANZNL46.js';
2
- import './chunk-7JHBCIR5.js';
3
- //# sourceMappingURL=storage-migration-TFF6IQTD.js.map
4
- //# sourceMappingURL=storage-migration-TFF6IQTD.js.map