woodsportal-client-sdk 4.0.8-dev.1 → 4.0.8-dev.3
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.
- package/dist/adapters/angular/index.js +4 -4
- package/dist/adapters/native/index.js +5 -5
- package/dist/adapters/react/index.js +5 -5
- package/dist/adapters/vue/index.js +4 -4
- package/dist/{auth-utils-T4FIBK3O.js → auth-utils-E4QDYAEW.js} +3 -3
- package/dist/{auth-utils-T4FIBK3O.js.map → auth-utils-E4QDYAEW.js.map} +1 -1
- package/dist/{build-error-description-XKI8vhGv.d.ts → build-error-description-DME5DFxq.d.ts} +12 -1
- package/dist/{chunk-VN6VPM5C.js → chunk-4RLRHJCP.js} +4 -4
- package/dist/{chunk-VN6VPM5C.js.map → chunk-4RLRHJCP.js.map} +1 -1
- package/dist/{chunk-NDDE6ZZ3.js → chunk-56UA4D6A.js} +43 -7
- package/dist/chunk-56UA4D6A.js.map +1 -0
- package/dist/{chunk-S3CVZTU4.js → chunk-5AXLES56.js} +5 -5
- package/dist/{chunk-S3CVZTU4.js.map → chunk-5AXLES56.js.map} +1 -1
- package/dist/{chunk-AVMMEQLO.js → chunk-6TX7N56D.js} +3 -3
- package/dist/{chunk-AVMMEQLO.js.map → chunk-6TX7N56D.js.map} +1 -1
- package/dist/{chunk-PVX6FWCW.js → chunk-B7ILWTB7.js} +5 -5
- package/dist/{chunk-PVX6FWCW.js.map → chunk-B7ILWTB7.js.map} +1 -1
- package/dist/{chunk-BXKFJ5NQ.js → chunk-BAESH6E2.js} +5 -5
- package/dist/{chunk-BXKFJ5NQ.js.map → chunk-BAESH6E2.js.map} +1 -1
- package/dist/{chunk-ZEGKRQA4.js → chunk-F4QIIWJR.js} +3 -3
- package/dist/{chunk-ZEGKRQA4.js.map → chunk-F4QIIWJR.js.map} +1 -1
- package/dist/{chunk-5LISZE2R.js → chunk-LV4CHY5C.js} +5 -5
- package/dist/{chunk-5LISZE2R.js.map → chunk-LV4CHY5C.js.map} +1 -1
- package/dist/{chunk-ETYE73AH.js → chunk-YZIKCAPA.js} +3 -3
- package/dist/{chunk-ETYE73AH.js.map → chunk-YZIKCAPA.js.map} +1 -1
- package/dist/{cross-tab-session-B34BLQU4.js → cross-tab-session-HGVBEJCJ.js} +6 -6
- package/dist/{cross-tab-session-B34BLQU4.js.map → cross-tab-session-HGVBEJCJ.js.map} +1 -1
- package/dist/entries/auth.d.ts +2 -2
- package/dist/entries/auth.js +5 -5
- package/dist/entries/auth.js.map +1 -1
- package/dist/entries/crm.js +7 -7
- package/dist/index.d.ts +2 -2
- package/dist/index.js +12 -12
- package/dist/index.js.map +1 -1
- package/package.json +4 -4
- package/dist/chunk-NDDE6ZZ3.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../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","../src/main/core/errors/api-error-active-codes.ts","../src/main/core/errors/api-error-display-config.ts","../src/main/core/errors/build-error-description.ts","../src/main/core/errors/resolve-api-error-display.ts","../src/main/core/errors/resolve-content-variant.ts","../src/main/core/errors/resolve-api-content-state.ts"],"names":["actions","normalizeErrorCode","normalizeCategory","resolveConfig"],"mappings":"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","file":"chunk-BXKFJ5NQ.js","sourcesContent":["/**\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, clearRefreshToken } 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 await setPortal(currentPortal)\n await 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 clearRefreshToken()\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 ForgetPasswordOtpVerifyPayload,\n ForgetPasswordOtpVerifyResponse,\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 verifyForgotPasswordOtp(options?: MutationOptions<ForgetPasswordOtpVerifyResponse, any>) {\n const { mutate, isLoading } = createMutation<ForgetPasswordOtpVerifyPayload, ForgetPasswordOtpVerifyResponse>(async (payload: any) => {\n const response: any = await Client.authentication.verifyForgotPasswordOtp(payload)\n const data = response?.data ?? response\n return {\n token: data?.token ?? ''\n }\n }, options)\n\n return {\n mutate,\n verifyForgotPasswordOtp: 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 verifyForgotPasswordOtp,\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 verifyForgotPasswordOtp,\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","/**\n * Active woodsportal-api error codes (from API-ERROR-CODES.md).\n * Sync guard tests assert every entry has a display config.\n */\nexport const WOODSPORTAL_API_ACTIVE_ERROR_CODES = [\n 'ACCESS_DENIED',\n 'ACCESS_FORBIDDEN',\n 'ACTION_NOT_ACCESSIBLE',\n 'AMBIGUOUS_HUB_ID',\n 'API_EXCEPTION',\n 'ASSOCIATION_LABEL_NOT_FOUND',\n 'AUTHENTICATION_FAILED',\n 'AUTH_ACCOUNT_LOCKED',\n 'AUTH_TOKEN_EXPIRED',\n 'AUTH_TOKEN_INVALID',\n 'BAD_REQUEST',\n 'COMMERCIAL_ACCESS_EXPIRED',\n 'DATA_CONFLICT',\n 'DATA_FETCH_FAILED',\n 'DATA_PROCESSING_FAILED',\n 'DECRYPTION_FAILED',\n 'EMAIL_SENDING_FAILED',\n 'ENCRYPTION_FAILED',\n 'ENTITLEMENT_USAGE_EXCEEDED',\n 'EXTERNAL_API_CLIENT_ERROR',\n 'FILE_UNSUPPORTED_TYPE',\n 'FILE_UPLOAD_FAILED',\n 'GRAPHQL_API_EXCEPTION',\n 'HUBSPOT_OBJECT_NOT_FOUND',\n 'HUBSPOT_REAUTH_REQUIRED',\n 'HUBSPOT_SYNC_FAILED',\n 'ILLEGAL_STATE',\n 'INTERNAL_ERROR',\n 'INVALID_ARGUMENT',\n 'JSON_PARSE_FAILED',\n 'JWT_SECRET_INVALID',\n 'LAST_ACTIVE_PIPELINE_REQUIRED',\n 'LOGIN_FAILED',\n 'MALFORMED_JSON',\n 'METHOD_NOT_ALLOWED',\n 'MISSING_HEADERS',\n 'MISSING_REFRESH_TOKEN',\n 'MISSING_REQUIRED_DATA',\n 'OAUTH_PROCESSING_ERROR',\n 'OBJECT_ASSOCIATION_NOT_FOUND',\n 'OBJECT_INACTIVE',\n 'PORTAL_INACTIVE',\n 'PRIMARY_COMPANY_NOT_FOUND',\n 'PRODUCT_INSTALL_FAILED',\n 'RATE_LIMIT_EXCEEDED',\n 'RESOURCE_ALREADY_EXISTS',\n 'RESOURCE_CREATION_FAILED',\n 'RESOURCE_DELETION_FAILED',\n 'RESOURCE_MISSING_ASSOCIATION',\n 'RESOURCE_NOT_FOUND',\n 'RESOURCE_UPDATE_FAILED',\n 'RESOURCE_USER_NOT_FOUND',\n 'SQS_PROCESSING_FAILED',\n 'SUBSCRIPTION_ERROR',\n 'SYSTEM_INTERNAL_ERROR',\n 'TOO_MANY_REQUESTS',\n 'USERNAME_NOT_FOUND',\n 'VALIDATION_FAILED',\n 'WARM_FAILED'\n] as const\n\n/** Reserved in ErrorCode.java — not yet wired in handlers. */\nexport const WOODSPORTAL_API_RESERVED_ERROR_CODES = [\n 'ACCESS_UNAUTHORIZED',\n 'AUTH_2FA_REQUIRED',\n 'AUTH_ACCOUNT_DISABLED',\n 'AUTH_EMAIL_NOT_VERIFIED',\n 'AUTH_INVALID_CREDENTIALS',\n 'CONFLICT_EMAIL_EXISTS',\n 'CONFLICT_FILE_EXISTS',\n 'CONFLICT_USERNAME_EXISTS',\n 'EXTERNAL_API_VALIDATION_ERROR',\n 'FILE_DECRYPTION_FAILED',\n 'RESOURCE_ACCESS_DENIED',\n 'RESOURCE_DEAL_NOT_FOUND',\n 'RESOURCE_DEPENDENCY_MISSING',\n 'RESOURCE_FILE_NOT_FOUND',\n 'RESOURCE_INVALID_STATE',\n 'RESOURCE_IN_USE',\n 'RESOURCE_MAPPING_NOT_DEFINED',\n 'RESOURCE_PERMISSION_DENIED',\n 'RESOURCE_TYPE_MISMATCH',\n 'SIGNATURE_INVALID',\n 'SYSTEM_DATABASE_ERROR',\n 'SYSTEM_DECRYPTION_ERROR',\n 'SYSTEM_ENCRYPTION_ERROR',\n 'SYSTEM_EXTERNAL_API_FAILURE',\n 'VALIDATION_INVALID_EMAIL',\n 'VALIDATION_MISSING_FIELDS',\n 'VALIDATION_PASSWORD_WEAK'\n] as const\n\n/** workflow-action-api subset (mobile may hit via shared routes). */\nexport const WORKFLOW_ACTION_API_ERROR_CODES = [\n 'COMMERCIAL_ACCESS_DENIED',\n 'NOT_FOUND',\n 'UNEXPECTED_ERROR',\n 'UNSUPPORTED_FILE_TYPE',\n 'VALIDATION_ERROR'\n] as const\n","import type { ApiContentVariant, ApiErrorSeverity } from './api-content-variants'\nimport type { ApiErrorVariant } from './api-error-variants'\n\nexport type ApiErrorDisplayConfig = {\n variant: ApiErrorVariant\n title: string\n fallbackDescription: string\n retry?: boolean\n support?: boolean\n contentVariant?: ApiContentVariant\n severity?: ApiErrorSeverity\n}\n\ntype ConfigOptions = {\n retry?: boolean\n support?: boolean\n contentVariant?: ApiContentVariant\n severity?: ApiErrorSeverity\n}\n\nfunction cfg(variant: ApiErrorVariant, title: string, fallbackDescription: string, options?: ConfigOptions): ApiErrorDisplayConfig {\n return {\n variant,\n title,\n fallbackDescription,\n retry: options?.retry,\n support: options?.support,\n contentVariant: options?.contentVariant,\n severity: options?.severity\n }\n}\n\nconst resource = (title: string, desc: string, options?: ConfigOptions) => cfg('error', title, desc, { severity: 'recoverable', ...options })\n\nconst association = (title: string, desc: string, options?: ConfigOptions) =>\n cfg('association', title, desc, {\n severity: 'informational',\n contentVariant: 'association-not-found',\n retry: false,\n ...options\n })\n\nconst access = (title: string, desc: string, options?: ConfigOptions) =>\n cfg('access', title, desc, {\n severity: 'informational',\n contentVariant: 'no-permission',\n retry: false,\n ...options\n })\n\nconst auth = (title: string, desc: string, options?: ConfigOptions) => cfg('auth', title, desc, { severity: 'auth', retry: false, ...options })\n\nconst validation = (title: string, desc: string, retry = false, options?: ConfigOptions) =>\n cfg('validation', title, desc, { severity: retry ? 'recoverable' : 'informational', retry, ...options })\n\nconst commercial = (title: string, desc: string, options?: ConfigOptions) =>\n cfg('commercial', title, desc, { severity: 'informational', support: true, retry: false, ...options })\n\nconst file = (title: string, desc: string, retry = true, options?: ConfigOptions) =>\n cfg('file', title, desc, { severity: retry ? 'recoverable' : 'informational', retry, ...options })\n\nconst integration = (title: string, desc: string, retry = true, options?: ConfigOptions) =>\n cfg('integration', title, desc, { severity: retry ? 'recoverable' : 'informational', retry, ...options })\n\nconst system = (title: string, desc: string, retry = true, options?: ConfigOptions) =>\n cfg('error', title, desc, { severity: 'recoverable', retry, support: true, ...options })\n\nconst rateLimit = (title: string, desc: string, options?: ConfigOptions) =>\n cfg('rateLimit', title, desc, { severity: 'recoverable', retry: true, ...options })\n\nexport const API_ERROR_DISPLAY_CONFIG: Record<string, ApiErrorDisplayConfig> = {\n // Resource & data\n RESOURCE_NOT_FOUND: resource(\n 'Resource not found',\n 'The requested resource could not be found. It may have been removed or you may not have access to it.',\n { support: true }\n ),\n HUBSPOT_OBJECT_NOT_FOUND: resource(\n 'Configuration not found',\n 'HubSpot object configuration is missing for this portal or object type. Contact your administrator.',\n { support: true, severity: 'informational', retry: false, contentVariant: 'association-not-found' }\n ),\n OBJECT_ASSOCIATION_NOT_FOUND: association('Association not found', 'Association not found. Please contact your administrator or support team.', {\n support: true\n }),\n ASSOCIATION_LABEL_NOT_FOUND: association(\n 'Association label not found',\n 'The association label could not be found. Contact your administrator to review the association setup.',\n { support: true }\n ),\n PRIMARY_COMPANY_NOT_FOUND: association(\n 'Primary company not found',\n 'Primary company not found. Please contact your administrator or support team.',\n { support: true }\n ),\n RESOURCE_USER_NOT_FOUND: resource('User not found', 'The requested user could not be found.', { support: true }),\n USERNAME_NOT_FOUND: resource('User not found', 'Username lookup failed. Verify the username and try again.'),\n RESOURCE_ALREADY_EXISTS: resource('Resource already exists', 'A resource with these details already exists.'),\n RESOURCE_MISSING_ASSOCIATION: association(\n 'Association required',\n 'A required association is missing. Create the association or contact your administrator.',\n { support: true }\n ),\n RESOURCE_CREATION_FAILED: resource(\"Couldn't create resource\", \"We couldn't create this resource. Please try again.\", { retry: true }),\n RESOURCE_UPDATE_FAILED: resource(\"Couldn't update resource\", \"We couldn't update this resource. Please try again.\", { retry: true }),\n RESOURCE_DELETION_FAILED: resource(\"Couldn't delete resource\", \"We couldn't delete this resource. Please try again.\", { retry: true }),\n DATA_FETCH_FAILED: resource(\n \"Couldn't load this page\",\n \"We couldn't load this page. Please try again in a few minutes. If the problem persists, contact your administrator.\",\n { retry: true, support: true }\n ),\n DATA_PROCESSING_FAILED: resource('Processing failed', \"We couldn't process the data. Please try again in a few minutes.\", { retry: true }),\n DATA_CONFLICT: resource('Data conflict', 'This action could not be completed because of a data conflict. Refresh and try again.', {\n retry: true\n }),\n JSON_PARSE_FAILED: resource('Invalid data', 'The response could not be read. Please try again.', { retry: true }),\n OBJECT_INACTIVE: resource('Object inactive', 'This HubSpot object is inactive. Contact your administrator to enable it.', { support: true }),\n LAST_ACTIVE_PIPELINE_REQUIRED: resource('Pipeline required', 'The last active pipeline cannot be disabled for deals or tickets.', {\n support: true\n }),\n MISSING_REQUIRED_DATA: resource('Missing required data', 'Required information is missing. Check the form and try again.'),\n\n // Auth & access\n AUTHENTICATION_FAILED: auth('Authentication failed', 'Sign-in failed. Check your credentials and try again.'),\n AUTH_TOKEN_INVALID: auth('Session invalid', 'Your session is invalid. Please sign in again.'),\n AUTH_TOKEN_EXPIRED: auth('Session expired', 'Your session has expired. Please sign in again.'),\n AUTH_ACCOUNT_LOCKED: auth('Account locked', 'Your account is locked. Contact support if you need access.'),\n LOGIN_FAILED: auth('Login failed', 'We could not sign you in. Check your credentials and try again.'),\n ACCESS_DENIED: access('Access denied', \"You don't have access to this section yet. Contact your administrator to request permission.\"),\n ACCESS_FORBIDDEN: access('Access forbidden', \"You don't have permission to access this resource.\"),\n MISSING_REFRESH_TOKEN: auth('Session ended', 'Your session has ended. Please sign in again.'),\n MISSING_HEADERS: validation('Invalid request', 'Required request headers are missing.'),\n JWT_SECRET_INVALID: system('Configuration error', 'Authentication is misconfigured. Contact your administrator.'),\n OAUTH_PROCESSING_ERROR: auth('OAuth error', 'We could not complete the OAuth sign-in. Please try again.'),\n HUBSPOT_REAUTH_REQUIRED: auth('HubSpot re-authorization required', 'Reconnect your HubSpot account to continue using WoodsPortal.'),\n PORTAL_INACTIVE: auth('Portal inactive', 'This portal is inactive. Contact your administrator.'),\n AMBIGUOUS_HUB_ID: auth('Account context unclear', 'We could not determine which hub to use. Contact your administrator.'),\n\n // Validation & request\n VALIDATION_FAILED: validation('Validation failed', 'Please check the form and correct any errors.'),\n BAD_REQUEST: validation('Invalid request', 'The request could not be processed. Check your input and try again.'),\n INVALID_ARGUMENT: validation('Invalid argument', 'One or more values are invalid. Check your input and try again.'),\n MALFORMED_JSON: validation('Invalid request body', 'The request body could not be read. Please try again.'),\n METHOD_NOT_ALLOWED: validation('Method not allowed', 'This action is not supported for this endpoint.'),\n ACTION_NOT_ACCESSIBLE: cfg(\n 'actionDenied',\n 'Action not accessible',\n \"You don't have permission to perform this action. Contact your administrator to request access.\",\n {\n severity: 'informational',\n contentVariant: 'action-denied',\n retry: false\n }\n ),\n\n // Commercial & billing\n COMMERCIAL_ACCESS_EXPIRED: commercial(\n 'Subscription required',\n 'Your trial or subscription has ended. Add a payment method or upgrade to continue.'\n ),\n ENTITLEMENT_USAGE_EXCEEDED: commercial(\n 'Usage limit reached',\n 'You have exceeded your usage allowance. Upgrade your plan or contact your administrator.'\n ),\n SUBSCRIPTION_ERROR: commercial('Subscription error', 'There was a problem with your subscription. Contact your administrator or support.'),\n\n // Files\n FILE_UPLOAD_FAILED: file('Upload failed', \"We couldn't upload this file. Please try again.\"),\n FILE_UNSUPPORTED_TYPE: file('Unsupported file type', 'This file type is not supported. Choose a different file and try again.', false),\n\n // External / integrations\n EXTERNAL_API_CLIENT_ERROR: integration('External service error', 'An external service returned an error. Please try again later.'),\n GRAPHQL_API_EXCEPTION: integration('CRM data error', 'We could not load CRM data. Please try again in a few minutes.'),\n API_EXCEPTION: integration('Service error', 'An external API call failed. Please try again.'),\n HUBSPOT_SYNC_FAILED: integration('HubSpot sync failed', 'We could not sync with HubSpot. Please try again later.'),\n PRODUCT_INSTALL_FAILED: integration('Installation failed', 'Product installation failed. Contact your administrator.', false),\n SQS_PROCESSING_FAILED: system('Processing delayed', 'Background processing failed. Please try again in a few minutes.'),\n EMAIL_SENDING_FAILED: integration('Email failed', 'We could not send the email. Please try again.'),\n\n // System\n INTERNAL_ERROR: system('Something went wrong', 'An unexpected error occurred. Please try again.'),\n SYSTEM_INTERNAL_ERROR: system('Server error', 'A server error occurred. Please try again in a few minutes.'),\n ILLEGAL_STATE: system('Unexpected state', 'The application is in an unexpected state. Please try again.'),\n ENCRYPTION_FAILED: system('Security error', 'Data could not be secured. Please try again.'),\n DECRYPTION_FAILED: system('Security error', 'Data could not be read. Please try again.'),\n\n // Rate limiting\n RATE_LIMIT_EXCEEDED: rateLimit('Too many requests', 'You have made too many requests. Please wait a moment and try again.'),\n TOO_MANY_REQUESTS: rateLimit('Too many requests', 'Too many requests from your network. Please wait and try again.'),\n\n // Internal job result\n WARM_FAILED: cfg('error', 'Cache warm failed', 'A background cache operation failed.', { retry: true }),\n\n // Reserved codes\n ACCESS_UNAUTHORIZED: access('Unauthorized', 'You are not authorized to access this resource.'),\n AUTH_2FA_REQUIRED: auth('Two-factor required', 'Complete two-factor authentication to continue.'),\n AUTH_ACCOUNT_DISABLED: auth('Account disabled', 'Your account is disabled. Contact support if you need access.'),\n AUTH_EMAIL_NOT_VERIFIED: auth('Email not verified', 'Verify your email address before signing in.'),\n AUTH_INVALID_CREDENTIALS: auth('Invalid credentials', 'The email or password is incorrect.'),\n CONFLICT_EMAIL_EXISTS: resource('Email already exists', 'An account with this email already exists.'),\n CONFLICT_FILE_EXISTS: file('File already exists', 'A file with this name already exists.', false),\n CONFLICT_USERNAME_EXISTS: resource('Username taken', 'This username is already in use.'),\n EXTERNAL_API_VALIDATION_ERROR: validation(\n 'External validation failed',\n 'An external service rejected the request. Check your input and try again.'\n ),\n FILE_DECRYPTION_FAILED: file('File unreadable', 'This file could not be decrypted or opened.'),\n RESOURCE_ACCESS_DENIED: access('Access denied', \"You don't have permission to access this resource.\"),\n RESOURCE_DEAL_NOT_FOUND: resource('Deal not found', 'The requested deal could not be found.', { support: true }),\n RESOURCE_DEPENDENCY_MISSING: resource('Dependency missing', 'A required dependency is missing. Contact your administrator.', { support: true }),\n RESOURCE_FILE_NOT_FOUND: file('File not found', 'The requested file could not be found.', false),\n RESOURCE_INVALID_STATE: resource('Invalid state', 'This resource is in a state that does not allow this action.', { retry: true }),\n RESOURCE_IN_USE: resource('Resource in use', 'This resource is in use and cannot be modified right now. Try again later.', { retry: true }),\n RESOURCE_MAPPING_NOT_DEFINED: resource('Mapping not defined', 'Resource mapping is not configured. Contact your administrator.', {\n support: true\n }),\n RESOURCE_PERMISSION_DENIED: access('Permission denied', \"You don't have permission for this resource.\"),\n RESOURCE_TYPE_MISMATCH: validation('Type mismatch', 'The resource type does not match what was expected.'),\n SIGNATURE_INVALID: auth('Invalid signature', 'Request signature validation failed.'),\n SYSTEM_DATABASE_ERROR: system('Database error', 'A database error occurred. Please try again later.'),\n SYSTEM_DECRYPTION_ERROR: system('Security error', 'Data could not be decrypted. Please try again.'),\n SYSTEM_ENCRYPTION_ERROR: system('Security error', 'Data could not be encrypted. Please try again.'),\n SYSTEM_EXTERNAL_API_FAILURE: integration('External service unavailable', 'An external service is unavailable. Please try again later.'),\n VALIDATION_INVALID_EMAIL: validation('Invalid email', 'Enter a valid email address.'),\n VALIDATION_MISSING_FIELDS: validation('Missing fields', 'Fill in all required fields.'),\n VALIDATION_PASSWORD_WEAK: validation('Weak password', 'Choose a stronger password that meets the requirements.'),\n\n // workflow-action-api\n COMMERCIAL_ACCESS_DENIED: commercial('Access denied', 'Commercial access is required for this action. Contact your administrator.'),\n NOT_FOUND: resource('Not found', 'The requested resource could not be found.', { support: true }),\n UNEXPECTED_ERROR: system('Unexpected error', 'An unexpected error occurred. Please try again.'),\n UNSUPPORTED_FILE_TYPE: file('Unsupported file type', 'This file type is not supported. Choose a different file and try again.', false, {\n contentVariant: 'unsupported-file'\n }),\n VALIDATION_ERROR: validation('Validation error', 'Please check the form and correct any errors.')\n}\n\n/** Category fallback when errorCode is unknown. */\nexport const API_ERROR_CATEGORY_FALLBACK: Record<string, ApiErrorDisplayConfig> = {\n AUTH: auth('Authentication required', 'Please sign in to continue.'),\n ACCESS: access('Access denied', \"You don't have permission to access this resource.\"),\n ACCESS_ERROR: access('Access denied', \"You don't have permission to access this resource.\"),\n VALIDATION: validation('Validation failed', 'Please check your input and try again.'),\n VALIDATION_ERROR: validation('Validation failed', 'Please check your input and try again.'),\n RATE_LIMIT: rateLimit('Too many requests', 'Please wait a moment and try again.'),\n FILE: file('File error', 'There was a problem with the file. Please try again.'),\n COMMERCIAL: commercial('Subscription required', 'A subscription or upgrade is required for this action.'),\n INTEGRATION: integration('Integration error', 'An external service error occurred. Please try again.'),\n THIRD_PARTY: integration('External service error', 'An external service error occurred. Please try again.'),\n EXTERNAL_API: integration('External service error', 'An external service error occurred. Please try again.'),\n RESOURCE: resource('Resource error', 'There was a problem with this resource. Please try again.', { retry: true }),\n NOT_FOUND: resource('Not found', 'The requested resource could not be found.', { support: true }),\n CONFLICT: resource('Conflict', 'This action conflicts with existing data. Refresh and try again.', { retry: true }),\n INTERNAL: system('Server error', 'A server error occurred. Please try again.'),\n SYSTEM: system('Server error', 'A server error occurred. Please try again.'),\n GENERIC: system('Something went wrong', 'Something went wrong. Please try again.'),\n GENERAL: system('Something went wrong', 'Something went wrong. Please try again.'),\n GENERAL_ERROR: system('Something went wrong', 'Something went wrong. Please try again.')\n}\n\nexport const DEFAULT_API_ERROR_DISPLAY: ApiErrorDisplayConfig = cfg('error', 'Something went wrong', 'Something went wrong. Please try again.', {\n retry: true\n})\n\nexport const NETWORK_ERROR_DISPLAY: ApiErrorDisplayConfig = cfg(\n 'network',\n 'Connection problem',\n 'Unable to reach the server. Please check your connection and try again.',\n { retry: true }\n)\n\nexport const TIMEOUT_ERROR_DISPLAY: ApiErrorDisplayConfig = cfg(\n 'network',\n 'Request timed out',\n 'The request timed out. Please check your connection and try again.',\n { retry: true }\n)\n\nexport const SERVICE_UNAVAILABLE_DISPLAY: ApiErrorDisplayConfig = cfg(\n 'network',\n 'Service unavailable',\n 'Service temporarily unavailable. Please try again in a few minutes.',\n { retry: true }\n)\n","/** Error codes where detailedMessage is user-facing (association/config context). */\nexport const DETAILED_MESSAGE_ERROR_CODES = new Set([\n 'OBJECT_ASSOCIATION_NOT_FOUND',\n 'ASSOCIATION_LABEL_NOT_FOUND',\n 'PRIMARY_COMPANY_NOT_FOUND',\n 'RESOURCE_MISSING_ASSOCIATION',\n 'HUBSPOT_OBJECT_NOT_FOUND'\n])\n\n/**\n * User-facing description: prefer API errorMessage (i18n), then detailedMessage when\n * appropriate, then config fallback.\n */\nexport function buildErrorDescription({\n errorMessage,\n detailedMessage,\n fallbackDescription,\n preferDetailedMessage = false,\n errorCode\n}: {\n errorMessage?: string\n detailedMessage?: string\n fallbackDescription?: string\n preferDetailedMessage?: boolean\n errorCode?: string\n}): string {\n const code = (errorCode ?? '').trim().toUpperCase()\n const useDetail = preferDetailedMessage || (code.length > 0 && DETAILED_MESSAGE_ERROR_CODES.has(code))\n const detail = detailedMessage?.trim() || ''\n const primary = errorMessage?.trim() || ''\n const fallback = fallbackDescription?.trim() || ''\n\n if (useDetail && detail) {\n return detail\n }\n\n if (primary) {\n return primary\n }\n\n if (detail) {\n return detail\n }\n\n if (fallback) {\n return fallback\n }\n\n return 'Something went wrong. Please try again.'\n}\n","import axios from 'axios'\nimport { parseApiErrorPayload } from '../auth/auth-error-codes'\nimport { classifyHttpError } from '../http/http-errors'\nimport type { ApiErrorVariant } from './api-error-variants'\nimport {\n API_ERROR_CATEGORY_FALLBACK,\n API_ERROR_DISPLAY_CONFIG,\n DEFAULT_API_ERROR_DISPLAY,\n NETWORK_ERROR_DISPLAY,\n SERVICE_UNAVAILABLE_DISPLAY,\n TIMEOUT_ERROR_DISPLAY,\n type ApiErrorDisplayConfig\n} from './api-error-display-config'\nimport { buildErrorDescription } from './build-error-description'\n\nexport type ResolvedApiErrorDisplay = {\n variant: ApiErrorVariant\n title: string\n description: string\n errorCode?: string\n correlationId?: string\n showRetry: boolean\n showSupport: boolean\n}\n\nexport type ResolveApiErrorDisplayOptions = {\n /** When false, never suggest retry (e.g. form validation). Default true. */\n allowRetry?: boolean\n}\n\nfunction normalizeErrorCode(code?: string): string {\n return (code ?? '').trim().toUpperCase()\n}\n\nfunction normalizeCategory(category?: string): string {\n return (category ?? '').trim().toUpperCase()\n}\n\nfunction resolveConfig(errorCode?: string, category?: string): ApiErrorDisplayConfig {\n const code = normalizeErrorCode(errorCode)\n if (code && API_ERROR_DISPLAY_CONFIG[code]) {\n return API_ERROR_DISPLAY_CONFIG[code]\n }\n\n const cat = normalizeCategory(category)\n if (cat && API_ERROR_CATEGORY_FALLBACK[cat]) {\n return API_ERROR_CATEGORY_FALLBACK[cat]\n }\n\n return DEFAULT_API_ERROR_DISPLAY\n}\n\nfunction fromConfig(\n config: ApiErrorDisplayConfig,\n payload: { errorMessage?: string; detailedMessage?: string; errorCode?: string; correlationId?: string },\n options?: ResolveApiErrorDisplayOptions\n): ResolvedApiErrorDisplay {\n const allowRetry = options?.allowRetry !== false\n const severity = config.severity ?? (config.retry ? 'recoverable' : 'fatal')\n return {\n variant: config.variant,\n title: config.title,\n description: buildErrorDescription({\n errorMessage: payload.errorMessage,\n detailedMessage: payload.detailedMessage,\n fallbackDescription: config.fallbackDescription,\n errorCode: payload.errorCode\n }),\n errorCode: payload.errorCode,\n correlationId: payload.correlationId,\n showRetry: allowRetry && severity === 'recoverable' && Boolean(config.retry),\n showSupport: Boolean(config.support)\n }\n}\n\nfunction resolveTransportDisplay(kind: ReturnType<typeof classifyHttpError>, options?: ResolveApiErrorDisplayOptions): ResolvedApiErrorDisplay {\n const allowRetry = options?.allowRetry !== false\n switch (kind) {\n case 'service_unavailable':\n return {\n ...fromConfig(SERVICE_UNAVAILABLE_DISPLAY, {}, options),\n showRetry: allowRetry\n }\n case 'timeout':\n return {\n ...fromConfig(TIMEOUT_ERROR_DISPLAY, {}, options),\n showRetry: allowRetry\n }\n case 'network':\n return {\n ...fromConfig(NETWORK_ERROR_DISPLAY, {}, options),\n showRetry: allowRetry\n }\n case 'auth':\n return fromConfig(API_ERROR_DISPLAY_CONFIG.AUTH_TOKEN_EXPIRED ?? DEFAULT_API_ERROR_DISPLAY, {}, options)\n default:\n return fromConfig(DEFAULT_API_ERROR_DISPLAY, {}, options)\n }\n}\n\n/** Extract API error payload from axios errors or plain response bodies. */\nexport function getApiErrorFromUnknown(error: unknown): ReturnType<typeof parseApiErrorPayload> {\n if (axios.isAxiosError(error)) {\n return parseApiErrorPayload(error.response?.data)\n }\n if (error && typeof error === 'object') {\n const record = error as Record<string, unknown>\n if (record.response && typeof record.response === 'object') {\n const response = record.response as Record<string, unknown>\n return parseApiErrorPayload(response.data)\n }\n return parseApiErrorPayload(error)\n }\n return {}\n}\n\n/**\n * Resolve user-facing title, description, variant, and affordances from any thrown value.\n * Prefers API errorMessage over config fallbacks; uses errorCode then category for mapping.\n */\nexport function resolveApiErrorDisplay(error: unknown, options?: ResolveApiErrorDisplayOptions): ResolvedApiErrorDisplay {\n if (!axios.isAxiosError(error) || error.response == null) {\n const kind = classifyHttpError(error)\n if (kind !== 'unknown' && kind !== 'client' && kind !== 'server') {\n return resolveTransportDisplay(kind, options)\n }\n if (!axios.isAxiosError(error)) {\n if (error instanceof Error && error.message.trim()) {\n return {\n variant: 'error',\n title: DEFAULT_API_ERROR_DISPLAY.title,\n description: error.message.trim(),\n showRetry: options?.allowRetry !== false,\n showSupport: false\n }\n }\n return fromConfig(DEFAULT_API_ERROR_DISPLAY, {}, options)\n }\n }\n\n const payload = getApiErrorFromUnknown(error)\n const hasPayload = Boolean(payload.errorCode || payload.errorMessage || payload.category || payload.correlationId)\n\n if (!hasPayload && axios.isAxiosError(error)) {\n const kind = classifyHttpError(error)\n if (kind === 'service_unavailable' || kind === 'timeout' || kind === 'network') {\n return resolveTransportDisplay(kind, options)\n }\n }\n\n const config = resolveConfig(payload.errorCode, payload.category)\n return fromConfig(config, payload, options)\n}\n","import type { ApiContentVariant } from './api-content-variants'\nimport type { ApiErrorVariant } from './api-error-variants'\n\nconst VARIANT_TO_CONTENT: Record<ApiErrorVariant, ApiContentVariant> = {\n error: 'error',\n access: 'no-permission',\n actionDenied: 'action-denied',\n association: 'association-not-found',\n validation: 'error',\n auth: 'auth',\n rateLimit: 'rateLimit',\n commercial: 'commercial',\n file: 'file',\n integration: 'integration',\n network: 'network'\n}\n\nexport function resolveContentVariantFromErrorVariant(variant: ApiErrorVariant): ApiContentVariant {\n return VARIANT_TO_CONTENT[variant] ?? 'error'\n}\n","import type { ApiContentVariant, ApiErrorSeverity } from './api-content-variants'\nimport type { ResolveApiErrorDisplayOptions, ResolvedApiErrorDisplay } from './resolve-api-error-display'\nimport { getApiErrorFromUnknown, resolveApiErrorDisplay } from './resolve-api-error-display'\nimport { buildErrorDescription } from './build-error-description'\nimport { API_ERROR_DISPLAY_CONFIG, type ApiErrorDisplayConfig } from './api-error-display-config'\nimport { API_ERROR_CATEGORY_FALLBACK, DEFAULT_API_ERROR_DISPLAY } from './api-error-display-config'\nimport { resolveContentVariantFromErrorVariant } from './resolve-content-variant'\n\nexport type ResolvedApiContentState = ResolvedApiErrorDisplay & {\n contentVariant: ApiContentVariant\n severity: ApiErrorSeverity\n isExpected: boolean\n}\n\nfunction normalizeErrorCode(code?: string): string {\n return (code ?? '').trim().toUpperCase()\n}\n\nfunction normalizeCategory(category?: string): string {\n return (category ?? '').trim().toUpperCase()\n}\n\nfunction resolveConfig(errorCode?: string, category?: string): ApiErrorDisplayConfig {\n const code = normalizeErrorCode(errorCode)\n if (code && API_ERROR_DISPLAY_CONFIG[code]) {\n return API_ERROR_DISPLAY_CONFIG[code]\n }\n\n const cat = normalizeCategory(category)\n if (cat && API_ERROR_CATEGORY_FALLBACK[cat]) {\n return API_ERROR_CATEGORY_FALLBACK[cat]\n }\n\n return DEFAULT_API_ERROR_DISPLAY\n}\n\nfunction inferSeverity(config: ApiErrorDisplayConfig): ApiErrorSeverity {\n if (config.severity) {\n return config.severity\n }\n if (config.variant === 'auth') {\n return 'auth'\n }\n if (config.variant === 'association' || config.variant === 'access' || config.variant === 'actionDenied') {\n return 'informational'\n }\n if (config.retry) {\n return 'recoverable'\n }\n return 'fatal'\n}\n\nfunction inferContentVariant(config: ApiErrorDisplayConfig): ApiContentVariant {\n if (config.contentVariant) {\n return config.contentVariant\n }\n return resolveContentVariantFromErrorVariant(config.variant)\n}\n\n/**\n * Resolve user-facing content state from any thrown value — includes severity,\n * content variant, and whether the outcome is expected (not a LogBox-worthy error).\n */\nexport function resolveApiContentState(error: unknown, options?: ResolveApiErrorDisplayOptions): ResolvedApiContentState {\n const base = resolveApiErrorDisplay(error, options)\n const payload = getApiErrorFromUnknown(error)\n const config = resolveConfig(payload.errorCode, payload.category)\n const severity = inferSeverity(config)\n const contentVariant = inferContentVariant(config)\n const allowRetry = options?.allowRetry !== false\n const description = buildErrorDescription({\n errorMessage: payload.errorMessage,\n detailedMessage: payload.detailedMessage,\n fallbackDescription: config.fallbackDescription,\n errorCode: payload.errorCode\n })\n\n const showRetry = allowRetry && severity === 'recoverable' && Boolean(config.retry)\n\n return {\n ...base,\n title: config.title,\n description,\n contentVariant,\n severity,\n isExpected: severity === 'informational',\n showRetry,\n showSupport: Boolean(config.support)\n }\n}\n\n/** True for expected business outcomes (association missing, access denied, etc.). */\nexport function isExpectedApiError(error: unknown): boolean {\n return resolveApiContentState(error, { allowRetry: false }).isExpected\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../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","../src/main/core/errors/api-error-active-codes.ts","../src/main/core/errors/api-error-display-config.ts","../src/main/core/errors/build-error-description.ts","../src/main/core/errors/resolve-api-error-display.ts","../src/main/core/errors/resolve-content-variant.ts","../src/main/core/errors/resolve-api-content-state.ts"],"names":["actions","normalizeErrorCode","normalizeCategory","resolveConfig"],"mappings":"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","file":"chunk-BAESH6E2.js","sourcesContent":["/**\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, clearRefreshToken } 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 await setPortal(currentPortal)\n await 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 clearRefreshToken()\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 ForgetPasswordOtpVerifyPayload,\n ForgetPasswordOtpVerifyResponse,\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 verifyForgotPasswordOtp(options?: MutationOptions<ForgetPasswordOtpVerifyResponse, any>) {\n const { mutate, isLoading } = createMutation<ForgetPasswordOtpVerifyPayload, ForgetPasswordOtpVerifyResponse>(async (payload: any) => {\n const response: any = await Client.authentication.verifyForgotPasswordOtp(payload)\n const data = response?.data ?? response\n return {\n token: data?.token ?? ''\n }\n }, options)\n\n return {\n mutate,\n verifyForgotPasswordOtp: 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 verifyForgotPasswordOtp,\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 verifyForgotPasswordOtp,\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","/**\n * Active woodsportal-api error codes (from API-ERROR-CODES.md).\n * Sync guard tests assert every entry has a display config.\n */\nexport const WOODSPORTAL_API_ACTIVE_ERROR_CODES = [\n 'ACCESS_DENIED',\n 'ACCESS_FORBIDDEN',\n 'ACTION_NOT_ACCESSIBLE',\n 'AMBIGUOUS_HUB_ID',\n 'API_EXCEPTION',\n 'ASSOCIATION_LABEL_NOT_FOUND',\n 'AUTHENTICATION_FAILED',\n 'AUTH_ACCOUNT_LOCKED',\n 'AUTH_TOKEN_EXPIRED',\n 'AUTH_TOKEN_INVALID',\n 'BAD_REQUEST',\n 'COMMERCIAL_ACCESS_EXPIRED',\n 'DATA_CONFLICT',\n 'DATA_FETCH_FAILED',\n 'DATA_PROCESSING_FAILED',\n 'DECRYPTION_FAILED',\n 'EMAIL_SENDING_FAILED',\n 'ENCRYPTION_FAILED',\n 'ENTITLEMENT_USAGE_EXCEEDED',\n 'EXTERNAL_API_CLIENT_ERROR',\n 'FILE_UNSUPPORTED_TYPE',\n 'FILE_UPLOAD_FAILED',\n 'GRAPHQL_API_EXCEPTION',\n 'HUBSPOT_OBJECT_NOT_FOUND',\n 'HUBSPOT_REAUTH_REQUIRED',\n 'HUBSPOT_SYNC_FAILED',\n 'ILLEGAL_STATE',\n 'INTERNAL_ERROR',\n 'INVALID_ARGUMENT',\n 'JSON_PARSE_FAILED',\n 'JWT_SECRET_INVALID',\n 'LAST_ACTIVE_PIPELINE_REQUIRED',\n 'LOGIN_FAILED',\n 'MALFORMED_JSON',\n 'METHOD_NOT_ALLOWED',\n 'MISSING_HEADERS',\n 'MISSING_REFRESH_TOKEN',\n 'MISSING_REQUIRED_DATA',\n 'OAUTH_PROCESSING_ERROR',\n 'OBJECT_ASSOCIATION_NOT_FOUND',\n 'OBJECT_INACTIVE',\n 'PORTAL_INACTIVE',\n 'PRIMARY_COMPANY_NOT_FOUND',\n 'PRODUCT_INSTALL_FAILED',\n 'RATE_LIMIT_EXCEEDED',\n 'RESOURCE_ALREADY_EXISTS',\n 'RESOURCE_CREATION_FAILED',\n 'RESOURCE_DELETION_FAILED',\n 'RESOURCE_MISSING_ASSOCIATION',\n 'RESOURCE_NOT_FOUND',\n 'RESOURCE_UPDATE_FAILED',\n 'RESOURCE_USER_NOT_FOUND',\n 'SQS_PROCESSING_FAILED',\n 'SUBSCRIPTION_ERROR',\n 'SYSTEM_INTERNAL_ERROR',\n 'TOO_MANY_REQUESTS',\n 'USERNAME_NOT_FOUND',\n 'VALIDATION_FAILED',\n 'WARM_FAILED'\n] as const\n\n/** Reserved in ErrorCode.java — not yet wired in handlers. */\nexport const WOODSPORTAL_API_RESERVED_ERROR_CODES = [\n 'ACCESS_UNAUTHORIZED',\n 'AUTH_2FA_REQUIRED',\n 'AUTH_ACCOUNT_DISABLED',\n 'AUTH_EMAIL_NOT_VERIFIED',\n 'AUTH_INVALID_CREDENTIALS',\n 'CONFLICT_EMAIL_EXISTS',\n 'CONFLICT_FILE_EXISTS',\n 'CONFLICT_USERNAME_EXISTS',\n 'EXTERNAL_API_VALIDATION_ERROR',\n 'FILE_DECRYPTION_FAILED',\n 'RESOURCE_ACCESS_DENIED',\n 'RESOURCE_DEAL_NOT_FOUND',\n 'RESOURCE_DEPENDENCY_MISSING',\n 'RESOURCE_FILE_NOT_FOUND',\n 'RESOURCE_INVALID_STATE',\n 'RESOURCE_IN_USE',\n 'RESOURCE_MAPPING_NOT_DEFINED',\n 'RESOURCE_PERMISSION_DENIED',\n 'RESOURCE_TYPE_MISMATCH',\n 'SIGNATURE_INVALID',\n 'SYSTEM_DATABASE_ERROR',\n 'SYSTEM_DECRYPTION_ERROR',\n 'SYSTEM_ENCRYPTION_ERROR',\n 'SYSTEM_EXTERNAL_API_FAILURE',\n 'VALIDATION_INVALID_EMAIL',\n 'VALIDATION_MISSING_FIELDS',\n 'VALIDATION_PASSWORD_WEAK'\n] as const\n\n/** workflow-action-api subset (mobile may hit via shared routes). */\nexport const WORKFLOW_ACTION_API_ERROR_CODES = [\n 'COMMERCIAL_ACCESS_DENIED',\n 'NOT_FOUND',\n 'UNEXPECTED_ERROR',\n 'UNSUPPORTED_FILE_TYPE',\n 'VALIDATION_ERROR'\n] as const\n","import type { ApiContentVariant, ApiErrorSeverity } from './api-content-variants'\nimport type { ApiErrorVariant } from './api-error-variants'\n\nexport type ApiErrorDisplayConfig = {\n variant: ApiErrorVariant\n title: string\n fallbackDescription: string\n retry?: boolean\n support?: boolean\n contentVariant?: ApiContentVariant\n severity?: ApiErrorSeverity\n}\n\ntype ConfigOptions = {\n retry?: boolean\n support?: boolean\n contentVariant?: ApiContentVariant\n severity?: ApiErrorSeverity\n}\n\nfunction cfg(variant: ApiErrorVariant, title: string, fallbackDescription: string, options?: ConfigOptions): ApiErrorDisplayConfig {\n return {\n variant,\n title,\n fallbackDescription,\n retry: options?.retry,\n support: options?.support,\n contentVariant: options?.contentVariant,\n severity: options?.severity\n }\n}\n\nconst resource = (title: string, desc: string, options?: ConfigOptions) => cfg('error', title, desc, { severity: 'recoverable', ...options })\n\nconst association = (title: string, desc: string, options?: ConfigOptions) =>\n cfg('association', title, desc, {\n severity: 'informational',\n contentVariant: 'association-not-found',\n retry: false,\n ...options\n })\n\nconst access = (title: string, desc: string, options?: ConfigOptions) =>\n cfg('access', title, desc, {\n severity: 'informational',\n contentVariant: 'no-permission',\n retry: false,\n ...options\n })\n\nconst auth = (title: string, desc: string, options?: ConfigOptions) => cfg('auth', title, desc, { severity: 'auth', retry: false, ...options })\n\nconst validation = (title: string, desc: string, retry = false, options?: ConfigOptions) =>\n cfg('validation', title, desc, { severity: retry ? 'recoverable' : 'informational', retry, ...options })\n\nconst commercial = (title: string, desc: string, options?: ConfigOptions) =>\n cfg('commercial', title, desc, { severity: 'informational', support: true, retry: false, ...options })\n\nconst file = (title: string, desc: string, retry = true, options?: ConfigOptions) =>\n cfg('file', title, desc, { severity: retry ? 'recoverable' : 'informational', retry, ...options })\n\nconst integration = (title: string, desc: string, retry = true, options?: ConfigOptions) =>\n cfg('integration', title, desc, { severity: retry ? 'recoverable' : 'informational', retry, ...options })\n\nconst system = (title: string, desc: string, retry = true, options?: ConfigOptions) =>\n cfg('error', title, desc, { severity: 'recoverable', retry, support: true, ...options })\n\nconst rateLimit = (title: string, desc: string, options?: ConfigOptions) =>\n cfg('rateLimit', title, desc, { severity: 'recoverable', retry: true, ...options })\n\nexport const API_ERROR_DISPLAY_CONFIG: Record<string, ApiErrorDisplayConfig> = {\n // Resource & data\n RESOURCE_NOT_FOUND: resource(\n 'Resource not found',\n 'The requested resource could not be found. It may have been removed or you may not have access to it.',\n { support: true }\n ),\n HUBSPOT_OBJECT_NOT_FOUND: resource(\n 'Configuration not found',\n 'HubSpot object configuration is missing for this portal or object type. Contact your administrator.',\n { support: true, severity: 'informational', retry: false, contentVariant: 'association-not-found' }\n ),\n OBJECT_ASSOCIATION_NOT_FOUND: association('Association not found', 'Association not found. Please contact your administrator or support team.', {\n support: true\n }),\n ASSOCIATION_LABEL_NOT_FOUND: association(\n 'Association label not found',\n 'The association label could not be found. Contact your administrator to review the association setup.',\n { support: true }\n ),\n PRIMARY_COMPANY_NOT_FOUND: association(\n 'Primary company not found',\n 'Primary company not found. Please contact your administrator or support team.',\n { support: true }\n ),\n RESOURCE_USER_NOT_FOUND: resource('User not found', 'The requested user could not be found.', { support: true }),\n USERNAME_NOT_FOUND: resource('User not found', 'Username lookup failed. Verify the username and try again.'),\n RESOURCE_ALREADY_EXISTS: resource('Resource already exists', 'A resource with these details already exists.'),\n RESOURCE_MISSING_ASSOCIATION: association(\n 'Association required',\n 'A required association is missing. Create the association or contact your administrator.',\n { support: true }\n ),\n RESOURCE_CREATION_FAILED: resource(\"Couldn't create resource\", \"We couldn't create this resource. Please try again.\", { retry: true }),\n RESOURCE_UPDATE_FAILED: resource(\"Couldn't update resource\", \"We couldn't update this resource. Please try again.\", { retry: true }),\n RESOURCE_DELETION_FAILED: resource(\"Couldn't delete resource\", \"We couldn't delete this resource. Please try again.\", { retry: true }),\n DATA_FETCH_FAILED: resource(\n \"Couldn't load this page\",\n \"We couldn't load this page. Please try again in a few minutes. If the problem persists, contact your administrator.\",\n { retry: true, support: true }\n ),\n DATA_PROCESSING_FAILED: resource('Processing failed', \"We couldn't process the data. Please try again in a few minutes.\", { retry: true }),\n DATA_CONFLICT: resource('Data conflict', 'This action could not be completed because of a data conflict. Refresh and try again.', {\n retry: true\n }),\n JSON_PARSE_FAILED: resource('Invalid data', 'The response could not be read. Please try again.', { retry: true }),\n OBJECT_INACTIVE: resource('Object inactive', 'This HubSpot object is inactive. Contact your administrator to enable it.', { support: true }),\n LAST_ACTIVE_PIPELINE_REQUIRED: resource('Pipeline required', 'The last active pipeline cannot be disabled for deals or tickets.', {\n support: true\n }),\n MISSING_REQUIRED_DATA: resource('Missing required data', 'Required information is missing. Check the form and try again.'),\n\n // Auth & access\n AUTHENTICATION_FAILED: auth('Authentication failed', 'Sign-in failed. Check your credentials and try again.'),\n AUTH_TOKEN_INVALID: auth('Session invalid', 'Your session is invalid. Please sign in again.'),\n AUTH_TOKEN_EXPIRED: auth('Session expired', 'Your session has expired. Please sign in again.'),\n AUTH_ACCOUNT_LOCKED: auth('Account locked', 'Your account is locked. Contact support if you need access.'),\n LOGIN_FAILED: auth('Login failed', 'We could not sign you in. Check your credentials and try again.'),\n ACCESS_DENIED: access('Access denied', \"You don't have access to this section yet. Contact your administrator to request permission.\"),\n ACCESS_FORBIDDEN: access('Access forbidden', \"You don't have permission to access this resource.\"),\n MISSING_REFRESH_TOKEN: auth('Session ended', 'Your session has ended. Please sign in again.'),\n MISSING_HEADERS: validation('Invalid request', 'Required request headers are missing.'),\n JWT_SECRET_INVALID: system('Configuration error', 'Authentication is misconfigured. Contact your administrator.'),\n OAUTH_PROCESSING_ERROR: auth('OAuth error', 'We could not complete the OAuth sign-in. Please try again.'),\n HUBSPOT_REAUTH_REQUIRED: auth('HubSpot re-authorization required', 'Reconnect your HubSpot account to continue using WoodsPortal.'),\n PORTAL_INACTIVE: auth('Portal inactive', 'This portal is inactive. Contact your administrator.'),\n AMBIGUOUS_HUB_ID: auth('Account context unclear', 'We could not determine which hub to use. Contact your administrator.'),\n\n // Validation & request\n VALIDATION_FAILED: validation('Validation failed', 'Please check the form and correct any errors.'),\n BAD_REQUEST: validation('Invalid request', 'The request could not be processed. Check your input and try again.'),\n INVALID_ARGUMENT: validation('Invalid argument', 'One or more values are invalid. Check your input and try again.'),\n MALFORMED_JSON: validation('Invalid request body', 'The request body could not be read. Please try again.'),\n METHOD_NOT_ALLOWED: validation('Method not allowed', 'This action is not supported for this endpoint.'),\n ACTION_NOT_ACCESSIBLE: cfg(\n 'actionDenied',\n 'Action not accessible',\n \"You don't have permission to perform this action. Contact your administrator to request access.\",\n {\n severity: 'informational',\n contentVariant: 'action-denied',\n retry: false\n }\n ),\n\n // Commercial & billing\n COMMERCIAL_ACCESS_EXPIRED: commercial(\n 'Subscription required',\n 'Your trial or subscription has ended. Add a payment method or upgrade to continue.'\n ),\n ENTITLEMENT_USAGE_EXCEEDED: commercial(\n 'Usage limit reached',\n 'You have exceeded your usage allowance. Upgrade your plan or contact your administrator.'\n ),\n SUBSCRIPTION_ERROR: commercial('Subscription error', 'There was a problem with your subscription. Contact your administrator or support.'),\n\n // Files\n FILE_UPLOAD_FAILED: file('Upload failed', \"We couldn't upload this file. Please try again.\"),\n FILE_UNSUPPORTED_TYPE: file('Unsupported file type', 'This file type is not supported. Choose a different file and try again.', false),\n\n // External / integrations\n EXTERNAL_API_CLIENT_ERROR: integration('External service error', 'An external service returned an error. Please try again later.'),\n GRAPHQL_API_EXCEPTION: integration('CRM data error', 'We could not load CRM data. Please try again in a few minutes.'),\n API_EXCEPTION: integration('Service error', 'An external API call failed. Please try again.'),\n HUBSPOT_SYNC_FAILED: integration('HubSpot sync failed', 'We could not sync with HubSpot. Please try again later.'),\n PRODUCT_INSTALL_FAILED: integration('Installation failed', 'Product installation failed. Contact your administrator.', false),\n SQS_PROCESSING_FAILED: system('Processing delayed', 'Background processing failed. Please try again in a few minutes.'),\n EMAIL_SENDING_FAILED: integration('Email failed', 'We could not send the email. Please try again.'),\n\n // System\n INTERNAL_ERROR: system('Something went wrong', 'An unexpected error occurred. Please try again.'),\n SYSTEM_INTERNAL_ERROR: system('Server error', 'A server error occurred. Please try again in a few minutes.'),\n ILLEGAL_STATE: system('Unexpected state', 'The application is in an unexpected state. Please try again.'),\n ENCRYPTION_FAILED: system('Security error', 'Data could not be secured. Please try again.'),\n DECRYPTION_FAILED: system('Security error', 'Data could not be read. Please try again.'),\n\n // Rate limiting\n RATE_LIMIT_EXCEEDED: rateLimit('Too many requests', 'You have made too many requests. Please wait a moment and try again.'),\n TOO_MANY_REQUESTS: rateLimit('Too many requests', 'Too many requests from your network. Please wait and try again.'),\n\n // Internal job result\n WARM_FAILED: cfg('error', 'Cache warm failed', 'A background cache operation failed.', { retry: true }),\n\n // Reserved codes\n ACCESS_UNAUTHORIZED: access('Unauthorized', 'You are not authorized to access this resource.'),\n AUTH_2FA_REQUIRED: auth('Two-factor required', 'Complete two-factor authentication to continue.'),\n AUTH_ACCOUNT_DISABLED: auth('Account disabled', 'Your account is disabled. Contact support if you need access.'),\n AUTH_EMAIL_NOT_VERIFIED: auth('Email not verified', 'Verify your email address before signing in.'),\n AUTH_INVALID_CREDENTIALS: auth('Invalid credentials', 'The email or password is incorrect.'),\n CONFLICT_EMAIL_EXISTS: resource('Email already exists', 'An account with this email already exists.'),\n CONFLICT_FILE_EXISTS: file('File already exists', 'A file with this name already exists.', false),\n CONFLICT_USERNAME_EXISTS: resource('Username taken', 'This username is already in use.'),\n EXTERNAL_API_VALIDATION_ERROR: validation(\n 'External validation failed',\n 'An external service rejected the request. Check your input and try again.'\n ),\n FILE_DECRYPTION_FAILED: file('File unreadable', 'This file could not be decrypted or opened.'),\n RESOURCE_ACCESS_DENIED: access('Access denied', \"You don't have permission to access this resource.\"),\n RESOURCE_DEAL_NOT_FOUND: resource('Deal not found', 'The requested deal could not be found.', { support: true }),\n RESOURCE_DEPENDENCY_MISSING: resource('Dependency missing', 'A required dependency is missing. Contact your administrator.', { support: true }),\n RESOURCE_FILE_NOT_FOUND: file('File not found', 'The requested file could not be found.', false),\n RESOURCE_INVALID_STATE: resource('Invalid state', 'This resource is in a state that does not allow this action.', { retry: true }),\n RESOURCE_IN_USE: resource('Resource in use', 'This resource is in use and cannot be modified right now. Try again later.', { retry: true }),\n RESOURCE_MAPPING_NOT_DEFINED: resource('Mapping not defined', 'Resource mapping is not configured. Contact your administrator.', {\n support: true\n }),\n RESOURCE_PERMISSION_DENIED: access('Permission denied', \"You don't have permission for this resource.\"),\n RESOURCE_TYPE_MISMATCH: validation('Type mismatch', 'The resource type does not match what was expected.'),\n SIGNATURE_INVALID: auth('Invalid signature', 'Request signature validation failed.'),\n SYSTEM_DATABASE_ERROR: system('Database error', 'A database error occurred. Please try again later.'),\n SYSTEM_DECRYPTION_ERROR: system('Security error', 'Data could not be decrypted. Please try again.'),\n SYSTEM_ENCRYPTION_ERROR: system('Security error', 'Data could not be encrypted. Please try again.'),\n SYSTEM_EXTERNAL_API_FAILURE: integration('External service unavailable', 'An external service is unavailable. Please try again later.'),\n VALIDATION_INVALID_EMAIL: validation('Invalid email', 'Enter a valid email address.'),\n VALIDATION_MISSING_FIELDS: validation('Missing fields', 'Fill in all required fields.'),\n VALIDATION_PASSWORD_WEAK: validation('Weak password', 'Choose a stronger password that meets the requirements.'),\n\n // workflow-action-api\n COMMERCIAL_ACCESS_DENIED: commercial('Access denied', 'Commercial access is required for this action. Contact your administrator.'),\n NOT_FOUND: resource('Not found', 'The requested resource could not be found.', { support: true }),\n UNEXPECTED_ERROR: system('Unexpected error', 'An unexpected error occurred. Please try again.'),\n UNSUPPORTED_FILE_TYPE: file('Unsupported file type', 'This file type is not supported. Choose a different file and try again.', false, {\n contentVariant: 'unsupported-file'\n }),\n VALIDATION_ERROR: validation('Validation error', 'Please check the form and correct any errors.')\n}\n\n/** Category fallback when errorCode is unknown. */\nexport const API_ERROR_CATEGORY_FALLBACK: Record<string, ApiErrorDisplayConfig> = {\n AUTH: auth('Authentication required', 'Please sign in to continue.'),\n ACCESS: access('Access denied', \"You don't have permission to access this resource.\"),\n ACCESS_ERROR: access('Access denied', \"You don't have permission to access this resource.\"),\n VALIDATION: validation('Validation failed', 'Please check your input and try again.'),\n VALIDATION_ERROR: validation('Validation failed', 'Please check your input and try again.'),\n RATE_LIMIT: rateLimit('Too many requests', 'Please wait a moment and try again.'),\n FILE: file('File error', 'There was a problem with the file. Please try again.'),\n COMMERCIAL: commercial('Subscription required', 'A subscription or upgrade is required for this action.'),\n INTEGRATION: integration('Integration error', 'An external service error occurred. Please try again.'),\n THIRD_PARTY: integration('External service error', 'An external service error occurred. Please try again.'),\n EXTERNAL_API: integration('External service error', 'An external service error occurred. Please try again.'),\n RESOURCE: resource('Resource error', 'There was a problem with this resource. Please try again.', { retry: true }),\n NOT_FOUND: resource('Not found', 'The requested resource could not be found.', { support: true }),\n CONFLICT: resource('Conflict', 'This action conflicts with existing data. Refresh and try again.', { retry: true }),\n INTERNAL: system('Server error', 'A server error occurred. Please try again.'),\n SYSTEM: system('Server error', 'A server error occurred. Please try again.'),\n GENERIC: system('Something went wrong', 'Something went wrong. Please try again.'),\n GENERAL: system('Something went wrong', 'Something went wrong. Please try again.'),\n GENERAL_ERROR: system('Something went wrong', 'Something went wrong. Please try again.')\n}\n\nexport const DEFAULT_API_ERROR_DISPLAY: ApiErrorDisplayConfig = cfg('error', 'Something went wrong', 'Something went wrong. Please try again.', {\n retry: true\n})\n\nexport const NETWORK_ERROR_DISPLAY: ApiErrorDisplayConfig = cfg(\n 'network',\n 'Connection problem',\n 'Unable to reach the server. Please check your connection and try again.',\n { retry: true }\n)\n\nexport const TIMEOUT_ERROR_DISPLAY: ApiErrorDisplayConfig = cfg(\n 'network',\n 'Request timed out',\n 'The request timed out. Please check your connection and try again.',\n { retry: true }\n)\n\nexport const SERVICE_UNAVAILABLE_DISPLAY: ApiErrorDisplayConfig = cfg(\n 'network',\n 'Service unavailable',\n 'Service temporarily unavailable. Please try again in a few minutes.',\n { retry: true }\n)\n","/** Error codes where detailedMessage is user-facing (association/config context). */\nexport const DETAILED_MESSAGE_ERROR_CODES = new Set([\n 'OBJECT_ASSOCIATION_NOT_FOUND',\n 'ASSOCIATION_LABEL_NOT_FOUND',\n 'PRIMARY_COMPANY_NOT_FOUND',\n 'RESOURCE_MISSING_ASSOCIATION',\n 'HUBSPOT_OBJECT_NOT_FOUND'\n])\n\n/**\n * User-facing description: prefer API errorMessage (i18n), then detailedMessage when\n * appropriate, then config fallback.\n */\nexport function buildErrorDescription({\n errorMessage,\n detailedMessage,\n fallbackDescription,\n preferDetailedMessage = false,\n errorCode\n}: {\n errorMessage?: string\n detailedMessage?: string\n fallbackDescription?: string\n preferDetailedMessage?: boolean\n errorCode?: string\n}): string {\n const code = (errorCode ?? '').trim().toUpperCase()\n const useDetail = preferDetailedMessage || (code.length > 0 && DETAILED_MESSAGE_ERROR_CODES.has(code))\n const detail = detailedMessage?.trim() || ''\n const primary = errorMessage?.trim() || ''\n const fallback = fallbackDescription?.trim() || ''\n\n if (useDetail && detail) {\n return detail\n }\n\n if (primary) {\n return primary\n }\n\n if (detail) {\n return detail\n }\n\n if (fallback) {\n return fallback\n }\n\n return 'Something went wrong. Please try again.'\n}\n","import axios from 'axios'\nimport { parseApiErrorPayload } from '../auth/auth-error-codes'\nimport { classifyHttpError } from '../http/http-errors'\nimport type { ApiErrorVariant } from './api-error-variants'\nimport {\n API_ERROR_CATEGORY_FALLBACK,\n API_ERROR_DISPLAY_CONFIG,\n DEFAULT_API_ERROR_DISPLAY,\n NETWORK_ERROR_DISPLAY,\n SERVICE_UNAVAILABLE_DISPLAY,\n TIMEOUT_ERROR_DISPLAY,\n type ApiErrorDisplayConfig\n} from './api-error-display-config'\nimport { buildErrorDescription } from './build-error-description'\n\nexport type ResolvedApiErrorDisplay = {\n variant: ApiErrorVariant\n title: string\n description: string\n errorCode?: string\n correlationId?: string\n showRetry: boolean\n showSupport: boolean\n}\n\nexport type ResolveApiErrorDisplayOptions = {\n /** When false, never suggest retry (e.g. form validation). Default true. */\n allowRetry?: boolean\n}\n\nfunction normalizeErrorCode(code?: string): string {\n return (code ?? '').trim().toUpperCase()\n}\n\nfunction normalizeCategory(category?: string): string {\n return (category ?? '').trim().toUpperCase()\n}\n\nfunction resolveConfig(errorCode?: string, category?: string): ApiErrorDisplayConfig {\n const code = normalizeErrorCode(errorCode)\n if (code && API_ERROR_DISPLAY_CONFIG[code]) {\n return API_ERROR_DISPLAY_CONFIG[code]\n }\n\n const cat = normalizeCategory(category)\n if (cat && API_ERROR_CATEGORY_FALLBACK[cat]) {\n return API_ERROR_CATEGORY_FALLBACK[cat]\n }\n\n return DEFAULT_API_ERROR_DISPLAY\n}\n\nfunction fromConfig(\n config: ApiErrorDisplayConfig,\n payload: { errorMessage?: string; detailedMessage?: string; errorCode?: string; correlationId?: string },\n options?: ResolveApiErrorDisplayOptions\n): ResolvedApiErrorDisplay {\n const allowRetry = options?.allowRetry !== false\n const severity = config.severity ?? (config.retry ? 'recoverable' : 'fatal')\n return {\n variant: config.variant,\n title: config.title,\n description: buildErrorDescription({\n errorMessage: payload.errorMessage,\n detailedMessage: payload.detailedMessage,\n fallbackDescription: config.fallbackDescription,\n errorCode: payload.errorCode\n }),\n errorCode: payload.errorCode,\n correlationId: payload.correlationId,\n showRetry: allowRetry && severity === 'recoverable' && Boolean(config.retry),\n showSupport: Boolean(config.support)\n }\n}\n\nfunction resolveTransportDisplay(kind: ReturnType<typeof classifyHttpError>, options?: ResolveApiErrorDisplayOptions): ResolvedApiErrorDisplay {\n const allowRetry = options?.allowRetry !== false\n switch (kind) {\n case 'service_unavailable':\n return {\n ...fromConfig(SERVICE_UNAVAILABLE_DISPLAY, {}, options),\n showRetry: allowRetry\n }\n case 'timeout':\n return {\n ...fromConfig(TIMEOUT_ERROR_DISPLAY, {}, options),\n showRetry: allowRetry\n }\n case 'network':\n return {\n ...fromConfig(NETWORK_ERROR_DISPLAY, {}, options),\n showRetry: allowRetry\n }\n case 'auth':\n return fromConfig(API_ERROR_DISPLAY_CONFIG.AUTH_TOKEN_EXPIRED ?? DEFAULT_API_ERROR_DISPLAY, {}, options)\n default:\n return fromConfig(DEFAULT_API_ERROR_DISPLAY, {}, options)\n }\n}\n\n/** Extract API error payload from axios errors or plain response bodies. */\nexport function getApiErrorFromUnknown(error: unknown): ReturnType<typeof parseApiErrorPayload> {\n if (axios.isAxiosError(error)) {\n return parseApiErrorPayload(error.response?.data)\n }\n if (error && typeof error === 'object') {\n const record = error as Record<string, unknown>\n if (record.response && typeof record.response === 'object') {\n const response = record.response as Record<string, unknown>\n return parseApiErrorPayload(response.data)\n }\n return parseApiErrorPayload(error)\n }\n return {}\n}\n\n/**\n * Resolve user-facing title, description, variant, and affordances from any thrown value.\n * Prefers API errorMessage over config fallbacks; uses errorCode then category for mapping.\n */\nexport function resolveApiErrorDisplay(error: unknown, options?: ResolveApiErrorDisplayOptions): ResolvedApiErrorDisplay {\n if (!axios.isAxiosError(error) || error.response == null) {\n const kind = classifyHttpError(error)\n if (kind !== 'unknown' && kind !== 'client' && kind !== 'server') {\n return resolveTransportDisplay(kind, options)\n }\n if (!axios.isAxiosError(error)) {\n if (error instanceof Error && error.message.trim()) {\n return {\n variant: 'error',\n title: DEFAULT_API_ERROR_DISPLAY.title,\n description: error.message.trim(),\n showRetry: options?.allowRetry !== false,\n showSupport: false\n }\n }\n return fromConfig(DEFAULT_API_ERROR_DISPLAY, {}, options)\n }\n }\n\n const payload = getApiErrorFromUnknown(error)\n const hasPayload = Boolean(payload.errorCode || payload.errorMessage || payload.category || payload.correlationId)\n\n if (!hasPayload && axios.isAxiosError(error)) {\n const kind = classifyHttpError(error)\n if (kind === 'service_unavailable' || kind === 'timeout' || kind === 'network') {\n return resolveTransportDisplay(kind, options)\n }\n }\n\n const config = resolveConfig(payload.errorCode, payload.category)\n return fromConfig(config, payload, options)\n}\n","import type { ApiContentVariant } from './api-content-variants'\nimport type { ApiErrorVariant } from './api-error-variants'\n\nconst VARIANT_TO_CONTENT: Record<ApiErrorVariant, ApiContentVariant> = {\n error: 'error',\n access: 'no-permission',\n actionDenied: 'action-denied',\n association: 'association-not-found',\n validation: 'error',\n auth: 'auth',\n rateLimit: 'rateLimit',\n commercial: 'commercial',\n file: 'file',\n integration: 'integration',\n network: 'network'\n}\n\nexport function resolveContentVariantFromErrorVariant(variant: ApiErrorVariant): ApiContentVariant {\n return VARIANT_TO_CONTENT[variant] ?? 'error'\n}\n","import type { ApiContentVariant, ApiErrorSeverity } from './api-content-variants'\nimport type { ResolveApiErrorDisplayOptions, ResolvedApiErrorDisplay } from './resolve-api-error-display'\nimport { getApiErrorFromUnknown, resolveApiErrorDisplay } from './resolve-api-error-display'\nimport { buildErrorDescription } from './build-error-description'\nimport { API_ERROR_DISPLAY_CONFIG, type ApiErrorDisplayConfig } from './api-error-display-config'\nimport { API_ERROR_CATEGORY_FALLBACK, DEFAULT_API_ERROR_DISPLAY } from './api-error-display-config'\nimport { resolveContentVariantFromErrorVariant } from './resolve-content-variant'\n\nexport type ResolvedApiContentState = ResolvedApiErrorDisplay & {\n contentVariant: ApiContentVariant\n severity: ApiErrorSeverity\n isExpected: boolean\n}\n\nfunction normalizeErrorCode(code?: string): string {\n return (code ?? '').trim().toUpperCase()\n}\n\nfunction normalizeCategory(category?: string): string {\n return (category ?? '').trim().toUpperCase()\n}\n\nfunction resolveConfig(errorCode?: string, category?: string): ApiErrorDisplayConfig {\n const code = normalizeErrorCode(errorCode)\n if (code && API_ERROR_DISPLAY_CONFIG[code]) {\n return API_ERROR_DISPLAY_CONFIG[code]\n }\n\n const cat = normalizeCategory(category)\n if (cat && API_ERROR_CATEGORY_FALLBACK[cat]) {\n return API_ERROR_CATEGORY_FALLBACK[cat]\n }\n\n return DEFAULT_API_ERROR_DISPLAY\n}\n\nfunction inferSeverity(config: ApiErrorDisplayConfig): ApiErrorSeverity {\n if (config.severity) {\n return config.severity\n }\n if (config.variant === 'auth') {\n return 'auth'\n }\n if (config.variant === 'association' || config.variant === 'access' || config.variant === 'actionDenied') {\n return 'informational'\n }\n if (config.retry) {\n return 'recoverable'\n }\n return 'fatal'\n}\n\nfunction inferContentVariant(config: ApiErrorDisplayConfig): ApiContentVariant {\n if (config.contentVariant) {\n return config.contentVariant\n }\n return resolveContentVariantFromErrorVariant(config.variant)\n}\n\n/**\n * Resolve user-facing content state from any thrown value — includes severity,\n * content variant, and whether the outcome is expected (not a LogBox-worthy error).\n */\nexport function resolveApiContentState(error: unknown, options?: ResolveApiErrorDisplayOptions): ResolvedApiContentState {\n const base = resolveApiErrorDisplay(error, options)\n const payload = getApiErrorFromUnknown(error)\n const config = resolveConfig(payload.errorCode, payload.category)\n const severity = inferSeverity(config)\n const contentVariant = inferContentVariant(config)\n const allowRetry = options?.allowRetry !== false\n const description = buildErrorDescription({\n errorMessage: payload.errorMessage,\n detailedMessage: payload.detailedMessage,\n fallbackDescription: config.fallbackDescription,\n errorCode: payload.errorCode\n })\n\n const showRetry = allowRetry && severity === 'recoverable' && Boolean(config.retry)\n\n return {\n ...base,\n title: config.title,\n description,\n contentVariant,\n severity,\n isExpected: severity === 'informational',\n showRetry,\n showSupport: Boolean(config.support)\n }\n}\n\n/** True for expected business outcomes (association missing, access denied, etc.). */\nexport function isExpectedApiError(error: unknown): boolean {\n return resolveApiContentState(error, { allowRetry: false }).isExpected\n}\n"]}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { createAdapterHooks } from './chunk-
|
|
1
|
+
import { createAdapterHooks } from './chunk-4RLRHJCP.js';
|
|
2
2
|
import { useSyncExternalStore } from 'react';
|
|
3
3
|
|
|
4
4
|
function createReactStoreComposable(store, actions) {
|
|
@@ -12,5 +12,5 @@ function createReactStoreComposable(store, actions) {
|
|
|
12
12
|
var { useTable, useTableUi, useMultiObjectActions, useNote, useEmail, useUser, useSync, useUploader, useFile } = createAdapterHooks(createReactStoreComposable);
|
|
13
13
|
|
|
14
14
|
export { useEmail, useFile, useMultiObjectActions, useNote, useSync, useTable, useTableUi, useUploader, useUser };
|
|
15
|
-
//# sourceMappingURL=chunk-
|
|
16
|
-
//# sourceMappingURL=chunk-
|
|
15
|
+
//# sourceMappingURL=chunk-F4QIIWJR.js.map
|
|
16
|
+
//# sourceMappingURL=chunk-F4QIIWJR.js.map
|